Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 14467|Yanıt: 1

Kafka Windows sistemi bir süre çalıştıktan sonra kapanır

[Bağlantıyı kopyala]
Yayınlandı 12.07.2021 10:57:01 | | | |
1: Arka plan

Daha önce Linux ortamında kafka kullandım ve kafka'nın kendisinde bir sorun olmadı. Ancak şu anda üzerinde çalıştığım bir projenin Windows ve Linux ile uyumlu olması gerekiyor ve Kafka'yı Window ortamında kullandığımda, Kafka'nın kendisinin Windows ile Linux kadar uyumlu olmadığını gördüm.

2: Sorun

Kafka'yı Window altında test ederken, Kafka'nın bir süre başlatıldıktan sonra bir hata olduğunu gördüm:

Dosyayı başka bir program kullanıyor ve süreç ona erişemiyor.
Aşağıdaki çözümler sorunu tamamen çözmez ve tavsiye edilmez

Windows Kafka HATASI Günlüğü temizlemede başarısız oldu__consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] HATA __consumer_offsets-42 için direksiyon C:\tmp\kafka-logs dosyasında IOException (kafka.server.LogDirFailureChannel) nedeniyle günlüğü temizlemek başarısız oldu
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) adresinde
        sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) adresinde
        sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387) adresinde
        sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) adresinde
        java.nio.file.Files.move(Files.java:1395) adresinde
        org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904) adresinde
        kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210) adresinde
        at 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)
        at kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        scala.collection.immutable.List.foreach(List.scala:333) adresinde
        at kafka.log.Log.replaceSegments(Log.scala:2402)
        at kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        at kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        at kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        scala.collection.immutable.List.foreach(List.scala:333) adresinde
        kafka.log.Cleaner.doClean(LogCleaner.scala:537) adresinde.
        at kafka.log.Cleaner.clean(LogCleaner.scala:511)
        kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380) adresinde
        kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352) adresinde
        kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332) adresinde
        kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321) adresinde
        kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96) adresinde
        Gizlendi: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000000000000.timeindex.clean.clean.> C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000000000.timeindex.swap: Başka bir program bu dosyayı kullanıyor ve süreç erişilemez.

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

3: Neden

Kafka log temizleme politikası, Windows ortamında dosyanın yeniden adlandırılmasına izin verilmediğini tetikler; temizlenmesi gereken logu açarken (Linux ortamında bu mümkündür), bu da Kafka'nın çökmesine neden olur.

İnternette en yaygın çözüm, "kafka'nın log dosyalarını boşaltmak ve kafka'yı yeniden başlatmak"tır; bu ise üretim ortamında açıkça gerçekçi değildir. Başlangıçta, durum için şu iki çözümü buldum:

Çözüm 1: Günlük temizleme politikasını değiştirerek kafka veri günlüklerini kalıcı olarak saklamak için günlük temizleme süresini sonsuza (-1) indirmek
Dezavantajlar: (1) Disk alanı artmaya devam edecek
Seçenek 2: Windows'ta bir sanal makine inşa edin (docker aynı ama daha sorunlu), ardından Kafka'yı sanal makinede dağıtın
Dezavantajlar: (1) O&M personelinin Linux O&M bilgisine sahip olması gerekir (2) Bellek tüketimini artırmak

Elbette, her iki seçeneğin eksiklikleri benim için dayanılmaz bir şeydi, bu yüzden yardım için dikkatimi Kafka topluluğuna çevirdim.

Tanrılara tapınma üzerine tartışma için buraya tıklayın:Bağlantı girişi görünür.

Kafka penceresinin altındaki sorununun hayal edildiği kadar kolay olmadığı anlaşılıyor.Şu ana kadar resmi bir çözüm yok。 Başka bir deyişle (Pencere altındaki kafka kullanma! )

Çözüm 3: Ama yine de, pencere altında kafka kullanma ihtiyacı hâlâ var, bu yüzden hâlâ dikkat eden ve bazı çözümler sunan birçok tanrı var. Büyük tanrılardan biri bu sorun için kafka kaynak kodunu geliştirmiştir. Test ettikten sonra, çözümü pencere altındaki sorunu çözdü ve kafka'yı pencere altında erişilebilir hale getirdi. Ancak bu çözüm için Kafka'nın katkıcısı, bunun güvenli olmayabileceğini (yani yamanın resmi sürüme entegre edilemeyeceğini) söyledi.

4: Çözümle (derlenmiş kafka paketi için indirme linki sonunda var)
Kafka yetkilileri yamanın çok güvenli olmadığını söylese de, yetkilinin şimdiye kadar hiçbir şey yapmadığını belirtti. Ve talep var, bu yüzden biraz düşündükten sonra sorunu tamamen çözmek için 3. seçenek yöntemini kullanmayı planlıyorum, yamayı koyup kafka'yı yeniden derleyeceğiz.

4.1: Kafka patch version download

Bu yazarın kafka yaması versiyonunu indirin

Bağlantı girişi görünür.

4.2: Kafka yama versiyonunu derleyin
Kafka derlemesi gradle üzerinden yapıldığı için önce gradle'i yapılandırmanız gerekiyor

Gradle nasıl yapılandırılır, bu makaleye bakabilirsiniz (yeniden basıldı, ihlal silinecek) Windows altında gradle kurulumu ve yapılandırması:Bağlantı girişi görünür.

Kafka'nın nasıl derleneceği hakkında bilgi için github'a bakabilirsiniz------ Kafka'yı Gradle kullanarak nasıl derlersiniz:Bağlantı girişi görünür.

Derledikten sonra, Windows altında kullanılabilen bir Kafka paketi alabilirsiniz.

"Kopyala-yapıştır" kavramına uygun olarak (sonuçta kaynak kodunu derlemek hâlâ oldukça zaman alıcı), işte derlediğim kafka paketi için bir indirme bağlantısı var, doğrudan indirip kullanabilirsiniz.

kafka_2.12-2.3.0_window Anti-Stop versiyonu için indirme adresi:

Bağlantı girişi görünür.

Orijinal bağlantı:Bağlantı girişi görünür.







Önceki:MySQL, bir veritabanı tablosunun açıklamalarını sorgular
Önümüzdeki:Sql Server Bölümlenmiş Tabloların Özeti
Yayınlandı 12.07.2021 21:16:33 |
Henüz oynamamış forum patronu derinden hayranlık görüyor
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com