この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 14467|答える: 1

KafkaのWindowsシステムは一定時間動作すると停止します

[リンクをコピー]
掲載地 2021/07/12 10:57:01 | | | |
1: 背景

以前Linux環境でKafkaを使っていましたが、Kafka自体には問題はありませんでした。 しかし、現在取り組んでいるプロジェクトはWindowsとLinuxの両方に対応している必要があり、Windows環境でKafkaを使うと、Kafka自体はLinuxほどWindowsとの互換性がないことに気づきました。

2:問題

WindowsでKafkaをテストしたところ、起動後に一定期間エラーが発生しました:

別のプログラムがそのファイルを使っており、プロセスはアクセスできません。
以下の解決策は問題を完全に解決するものではなく、推奨されません

Windows Kafkaエラー ログのクリーンアップに失敗__consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] エラー IOException (kafka.server.LogDirFailureChannel) により、__consumer_offsets-42のログをC:\tmp\kafka-logsでクリーンアップできませんでした
java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.cleaned ->
C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.swap: 另一个程序正在使用此文件,进程无法访问。

        sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        java.nio.file.Files.move(Files.java:1395)
        org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        at kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        at kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        at kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        at kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        scala.collection.immutable.List.foreach(List.scala:333)
        at kafka.log.Log.replaceSegments(Log.scala:2402)
        kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        scala.collection.immutable.List.foreach(List.scala:333)
        kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        kafka.log.Cleaner.clean(LogCleaner.scala:511)で
        kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        at kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        抑制:java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000000000.timeindex.swap: 別のプログラムがこのファイルを使用しており、そのプロセスはアクセスできません。

                sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
                at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
                sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301)
                at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
                java.nio.file.Files.move(Files.java:1395)
                org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901)
                ... あと20人

3:原因

Kafkaログクリーニングポリシーは、Windows環境ではクリーンアップが必要なログを開く際にファイル名を変更することが許可されず(Linux環境では可能です)、そのためKafkaがクラッシュします。

インターネット上で最も一般的な解決策は「kafkaのログファイルを空にしてkafkaを再起動する」ことですが、これは本番環境では明らかに非現実的です。 そこで最初に、私はこの状況に対して次の2つの解決策を考えました。

解決策1:ログクリーンアップポリシーを変更し、ログクリーンアップ時間を無限大(-1)に変更してカフカのデータログを永久に保存する
欠点:(1) ディスク容量が増加し続ける
オプション2:Windows上で仮想マシンを構築し(Dockerは同じですが、より手間がかかります)、その後仮想マシン内でKafkaをデプロイします
欠点:(1) O&M担当者はLinuxのO&M知識をある程度知っている必要がある (2) メモリ消費の増加

もちろん、どちらの選択肢にも耐えられない欠点があったので、助けを求めてカフカコミュニティに目を向けました。

神々の崇拝についての議論はこちらをクリックしてください:ハイパーリンクのログインが見えます。

窓の下のカフカの問題は想像ほど簡単ではないことは理解されています。今のところ公式な解決策はありません。 言い換えれば(窓の下でカフカを使わないでください! )

解決策3:それでも、窓の下でカフカを使う必要性は依然として存在し、多くの神々が注目し、いくつかの解決策を提案しています。 偉大な神の一人がこの問題のカフカのソースコードを開発しました。 テストの結果、彼の解決策はウィンドウ下で問題を解決し、カフカがウィンドウ下で利用可能になりました。 しかし、この解決策については、カフカの貢献者は安全でない可能性がある(つまりパッチは公式版に統合できない)と述べています。

4: 解決(コンパイルされたカフカパッケージのダウンロードリンクは最後にあります)
カフカの関係者はパッチはあまり安全ではないと述べていますが、これまでのところ何もしていません。 そして需要は確かに存在しているので、検討した結果、問題を最終的に解決するためにオプション3の方法を使うつもりなので、パッチを入れてカフカを再コンパイルします。

4.1: Kafkaパッチ版ダウンロード

この著者のカフカパッチ版をダウンロードしてください

ハイパーリンクのログインが見えます。

4.2: Kafkaパッチ版のコンパイル
KafkaのコンパイルはGradleを通じて行われるため、まずGradleの設定が必要です

gradleの設定方法については、この記事(再掲載、侵害は削除されます)を参照してください。Windowsでのgradleのインストールと設定:ハイパーリンクのログインが見えます。

Kafkaのコンパイル方法についてはGitHubを参照してください------Gradleを使ってKafkaをコンパイルする方法:ハイパーリンクのログインが見えます。

コンパイル後、Windows上で使えるKafkaパッケージを入手できます。

「コピー&ペースト」の概念に沿って(結局のところソースコードのコンパイルはかなり時間がかかります)、私がコンパイルしたカフカパッケージのダウンロードリンクをこちらに示します。直接ダウンロードして使うことができます。

kafka_2.12-2.3.0_window アンチダウンタイム版のダウンロードアドレス:

ハイパーリンクのログインが見えます。

元のリンク:ハイパーリンクのログインが見えます。







先の:MySQLはデータベーステーブルの注釈をクエリします
次に:パーティションテーブルのSQL Server概要
掲載地 2021/07/12 21:16:33 |
まだプレイしていないフォーラムのボスは、深く崇拝されています
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com