Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 14467|Odpoveď: 1

Systém Kafka Windows sa po určitom čase zasekne

[Kopírovať odkaz]
Zverejnené 12. 7. 2021 10:57:01 | | | |
1: Pozadie

Predtým som používal Kafku v Linuxovom prostredí a s Kafkou samotnou som nemal žiadny problém. Avšak projekt, na ktorom momentálne pracujem, musí byť kompatibilný s Windows a Linuxom, a keď používam Kafku v prostredí Window, zistil som, že Kafka sama o sebe nie je taká kompatibilná s Windows ako Linux.

2: Problém

Pri testovaní Kafky pod Windows som zistil, že Kafka mala po určitom spustení chybu:

Iný program používa súbor a proces k nemu nemá prístup.
Nasledujúce riešenia problém úplne nevyriešia a neodporúčajú sa

Windows Kafka CHYBA Nepodarilo sa vyčistiť logy pre __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] CHYBA Nepodarilo sa vyčistiť log pre __consumer_offsets-42 v smere C:\tmp\kafka-logs kvôli IOException (kafka.server.LogDirFailureChannel)
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)
        at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        at java.nio.file.Files.move(Files.java:1395)
        at org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        na kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        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)
        at scala.collection.immutable.List.foreach(List.scala:333)
        at kafka.log.Log.replaceSegments(Log.scala:2402)
        na kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        na kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        na kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        at scala.collection.immutable.List.foreach(List.scala:333)
        na kafka.log.Cleaner.doClean (LogCleaner.scala:537)
        na kafka.log.Cleaner.clean(LogCleaner.scala:511)
        na kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        na kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        na kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        na kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Potlačené: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000.timeindex.clean -> C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000000000.timeindex.swap: Iný program používa tento súbor a proces je neprístupný.

                at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
                at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
                at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301)
                at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
                at java.nio.file.Files.move(Files.java:1395)
                at org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901)
                ... Ďalších 20

3: Príčina

Politika čistenia logov Kafka spôsobuje, že v prostredí Windows nie je povolené premenovať súbor pri otváraní logu, ktorý je potrebné vyčistiť (čo je možné v prostredí Linuxu), čo spôsobuje pád Kafky.

Najbežnejšie riešenie na internete je "vyprázdniť logové súbory Kafky a reštartovať Kafku", čo je v produkčnom prostredí očividne nereálne. Takže na začiatku som prišiel s týmito dvoma riešeniami tejto situácie:

Riešenie 1: Upraviť politiku čistenia logov tak, aby sa čas čistenia logov zmenil na nekonečný (-1) a trvalo ukladal Kafka dátové logy
Nevýhody: (1) Priestor na disku bude naďalej rásť
Možnosť 2: Postaviť virtuálny stroj na Windows (docker je rovnaký, ale zložitejší) a potom nasadiť Kafku priamo do virtuálneho stroja
Nevýhody: (1) Personál O&M musí ovládať nejaké znalosti Linuxu O&M (2) Zvýšiť spotrebu pamäte

Samozrejme, nedostatky oboch možností boli pre mňa neznesiteľné, preto som sa obrátil na komunitu Kafka s prosbou o pomoc.

Kliknite sem pre diskusiu o uctievaní bohov:Prihlásenie na hypertextový odkaz je viditeľné.

Je známe, že problém Kafku pod oknom nie je taký jednoduchý, ako sa predpokladá.Zatiaľ neexistuje žiadne oficiálne riešenie。 Inými slovami (Nepoužívajte kafku pod oknom! )

Riešenie 3: Aj tak však stále existuje potreba používať Kafku pod oknom, takže stále je veľa bohov, ktorí venujú pozornosť a navrhujú riešenia. Jeden z veľkých bohov vyvinul zdrojový kód Kafka pre tento problém. Po testovaní jeho riešenie vyriešilo problém pod oknom, čím sprístupnil Kafku pod oknom. Pre toto riešenie však prispievateľ Kafky uviedol, že nemusí byť bezpečné (teda patch nie je možné integrovať do oficiálnej verzie).

4: Solve (na konci je odkaz na stiahnutie skompilovaného balíka Kafka)
Hoci predstavitelia Kafky tvrdia, že nášivka nie je veľmi bezpečná, úradník zatiaľ nič neurobil. A dopyt naozaj existuje, takže po zvážení plánujem použiť metódu možnosti 3 na vyriešenie problému raz a navždy, takže patch vložíme a prekompilujeme Kafku.

4.1: Stiahnutie verzie Kafka patchu

Stiahnite si verziu Kafka patchu tohto autora

Prihlásenie na hypertextový odkaz je viditeľné.

4.2: Skompilovať verziu Kafka patch
Keďže Kafka kompilácia prebieha cez Gradle, je potrebné najskôr nastaviť Gradle

Pre konfiguráciu gradle sa môžete pozrieť na tento článok (pretlačený, porušenie bude vymazané) Inštalácia a konfigurácia gradle vo Windows:Prihlásenie na hypertextový odkaz je viditeľné.

Pre informácie o tom, ako skompilovať Kafku, môžete navštíviť github------ Ako kompilovať Kafku pomocou Gradle:Prihlásenie na hypertextový odkaz je viditeľné.

Po kompilácii môžete získať balík Kafka, ktorý sa dá použiť vo Windows.

V súlade s konceptom "kopírovať a vkladať" (napokon, kompilácia zdrojového kódu je stále dosť časovo náročná), tu je odkaz na stiahnutie balíka Kafka, ktorý som skompiloval, a môžete si ho stiahnuť a používať priamo.

kafka_2.12-2.3.0_window Adresa na stiahnutie verzie proti výpadkom:

Prihlásenie na hypertextový odkaz je viditeľné.

Pôvodný odkaz:Prihlásenie na hypertextový odkaz je viditeľné.







Predchádzajúci:MySQL dotazuje anotácie databázovej tabuľky
Budúci:SQL Server Súhrn rozdelených tabuliek
Zverejnené 12. 7. 2021 21:16:33 |
Šéf fóra, ktorý ešte nehral, je tak hlboko uctievaný
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com