1: Háttér
Korábban használtam a kafkát Linux környezetben, és magával a kafkával nem volt gond. Azonban egy jelenleg dolgozó projektnek kompatibilisnek kell lennie a Windows-szal és a Linux-szal, és amikor a Kafkát használom az ablak környezetében, azt tapasztaltam, hogy maga a Kafka nem kompatibilis annyira a Windows-szel, mint a Linux.
2: Probléma
Amikor a Kafkát az ablak alatt teszteltem, azt tapasztaltam, hogy a Kafkának hiba volt a indítás után egy ideig:
Egy másik program használja a fájlt, és a folyamat nem fér hozzá.
[2021-07-06 09:06:10,800] HIBA Nem sikerült tisztítani a naplót a __consumer_offsets-42-nél a C:\tmp\kafka-logs rendszerében IOException (kafka.server.LogDirFailureChannel) miatt
java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.cleaned ->
C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.swap: 另一个程序正在使用此文件,进程无法访问。
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) a sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387) oldalon a sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) címen java.nio.file.Files.move(Files.java:1395) címen az org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904) címen a kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210) címen at kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155) a kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79) a kafka.log.LazyIndex.renameTo(LazyIndex.scala:79) a kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496) címen at kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402) at kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402) a scala.collection.immutable.List.foreach címen (List.scala:333) at kafka.log.Log.replaceSegments(Log.scala:2402) a kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613) címen. a kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538) a kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537) a scala.collection.immutable.List.foreach címen (List.scala:333) a kafka.log.Cleaner.doClean(LogCleaner.scala:537) a kafka.log.Cleaner.clean(LogCleaner.scala:511) címen. a kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380) címen a kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352) címen a kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332) címen a kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321) címen a kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96) címen Elnyomott: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000000000.timeindex.clean.> C:\tmp\kafka-logs\__consumer_offsets-42\ 0000000000000000000000000.timeindex.swap: Egy másik program használja ezt a fájlt, és a folyamat elérhetetlen.
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) a sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301) címen a sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) címen java.nio.file.Files.move(Files.java:1395) címen az org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901) címen ... Még 20
3: Ok
A Kafka naplótisztítási szabályzat azt idézi elő, hogy Windows környezetben nem lehet átnevezni a fájlt, miközben megnyitja a tisztítandó naplót (Linux környezetben ez lehetséges), ami a Kafka összeomlásához vezet.
Az interneten a leggyakoribb megoldás az, hogy "kiürítik a kafka naplófájljait és újraindítják a kafkát", ami nyilvánvalóan irreális egy gyártási környezetben. Így kezdetben a következő két megoldást találtam ki a helyzetre:
1. megoldás: Módosítsuk a naplótisztítási szabályzatot, hogy a naplótisztítási időt végtelenre (-1) módosítsuk, hogy a kafka adatnaplókat véglegesen tárolhassuk Hátrányok: (1) A lemezhely tovább nő 2. lehetőség: Építsünk egy virtuális gépet Windowson (a docker ugyanaz, de problémásabb), majd telepítsd a Kafkát a virtuális gépben Hátrányok: (1) Az O&M személyzetnek kell némi Linux O&M ismeretet (2) Növelni a memóriafogyasztást
Nyilvánvalóan mindkét lehetőség hiányosságai elviselhetetlenek voltak számomra, ezért a Kafka közösséghez fordultam segítségért.
Kattintson ide az istenek imádatáról szóló beszélgetésért:A hiperlink bejelentkezés látható.
Úgy értik, hogy a Kafka problémája az ablak alatt nem olyan egyszerű, mint azt elképzeltük.Eddig nincs hivatalos megoldás。 Más szóval: (Ne használd a kafkát az ablak alatt! )
3. megoldás: De még így is fennáll a szükség arra, hogy a kafkát az ablak alatt használja, így még mindig sok isten figyel és megoldásokat javasol. Az egyik nagy isten fejlesztette ki a kafka forráskódot erre a problémára. Tesztelés után a megoldása megoldotta a problémát az ablak alatt, így a kafka elérhetővé vált az ablak alatt. Azonban ehhez a megoldáshoz a Kafka közreműködője azt mondta, hogy lehet, hogy nem biztonságos (vagyis a javítás nem integrálható a hivatalos verzióba).
4: Megoldás (a végén a letölthető kafka csomaghoz tartozik) Bár a Kafka tisztviselői szerint a javítás nem túl biztonságos, eddig nem tett semmit. És van igény, így némi megfontolás után még mindig a 3-as opció módszerét tervezem használni, hogy véglegesen megoldjam a problémát, így betesszük a javítást és újrafordítjuk a kafkát.
4.1: Kafka patch verzió letöltése
Töltse le ennek a szerzőnek a kafka patch változatát
A hiperlink bejelentkezés látható.
4.2: A Kafka patch verzió fordítása Mivel a kafka fordítás a gradle-en keresztül történik, először be kell állítanod a gradle-t
A gradle konfigurálásáról lásd ezt a cikket (újranyomtatva, a szabálysértést töröljük) a gradle telepítése és konfigurálása Windows alatt:A hiperlink bejelentkezés látható.
A Kafka fordításáról információért a githubon találhatod------ Hogyan fordítsuk le Kafkát a Gradle segítségével:A hiperlink bejelentkezés látható.
Fordítás után kaphatsz egy Kafka csomagot, amit Windows alatt is használhatsz.
A "másolás-beillesztés" koncepciójához igazodva (hiszen a forráskód fordítása még mindig elég időigényes), itt van egy letölthető link a kafka csomaghoz, amit én fordítottam, és közvetlenül letöltheted és használhatod.
kafka_2.12-2.3.0_window Letöltési cím az anti-leállás verzióhoz:
A hiperlink bejelentkezés látható.
Eredeti link:A hiperlink bejelentkezés látható.
|