Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 14467|Odgovoriti: 1

Kafka Windows sistem se po določenem delu zatakne

[Kopiraj povezavo]
Objavljeno na 12. 07. 2021 10:57:01 | | | |
1: Ozadje

Kafko sem že uporabljal v Linux okolju in s samo Kafko ni bilo težav. Vendar pa mora biti projekt, na katerem trenutno delam, združljiv z Windows in Linuxom, in ko uporabljam Kafko v okolju Window, sem ugotovil, da Kafka sama po sebi ni tako združljiva z Windows kot Linux.

2: Problem

Ko sem testiral Kafko pod Windows, sem ugotovil, da je imela Kafka po določenem času napako:

Drug program uporablja datoteko in proces je ne more dostopati.
Naslednje rešitve ne rešijo popolnoma problema in niso priporočljive

Windows Kafka NAPAKA Ni uspelo očistiti dnevnika za __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] NAPAKA Ni uspelo očistiti dnevnika za __consumer_offsets-42 v dir C:\tmp\kafka-logs zaradi 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)
        na 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.:210)
        at kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.:155)
        at kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.:79)
        at kafka.log.LazyIndex.renameTo(LazyIndex.:79)
        at kafka.log.LogSegment.changeFileSuffixes(LogSegment.:496)
        at kafka.log.Log.$anonfun$replaceSegments$4(Log.:2402)
        at kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.:2402)
        at.collection.immutable.List.foreach(List.:333)
        na kafka.log.Log.replaceSegments(Log.:2402)
        na kafka.log.Cleaner.cleanSegments(LogCleaner.:613)
        na kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.:538)
        na kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.:537)
        at.collection.immutable.List.foreach(List.:333)
        na kafka.log.Cleaner.doClean (LogCleaner.:537)
        na kafka.log.Cleaner.clean(LogCleaner.:511)
        na kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.:380)
        na kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.:352)
        na kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.:332)
        na kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.:321)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.:96)
        Suppressed: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.clean -> C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000000000.timeindex.swap: Drug program uporablja to datoteko in postopek ni dostopen.

                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)
                na java.nio.file.Files.move(Files.java:1395)
                at org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901)
                ... Še 20

3: Vzrok

Kafka politika čiščenja dnevnikov sproži, da v okolju Windows ni dovoljeno preimenovati datoteke med odpiranjem dnevnika, ki ga je treba očistiti (kar je mogoče v Linux okolju), kar povzroči zrušitev Kafke.

Najpogostejša rešitev na internetu je "izprazniti dnevniške datoteke Kafke in ponovno zagnati Kafko", kar je očitno nerealno v produkcijskem okolju. Tako sem na začetku prišel do naslednjih dveh rešitev za to situacijo:

Rešitev 1: Spremenite politiko čiščenja dnevnikov, da se čas čiščenja dnevnika spremeni v neskončno (-1), da se Kafka podatkovni dnevniki trajno shranijo
Slabosti: (1) Prostor na disku se bo še naprej povečeval
Možnost 2: Zgradite virtualni stroj na Windows (docker je enak, a bolj problematičen) in nato namestite Kafko v virtualni stroj
Slabosti: (1) Osebje O&M mora poznati nekaj znanja o Linux O&M (2) Povečati porabo pomnilnika

Očitno so bile pomanjkljivosti obeh možnosti zame neznosne, zato sem se obrnil na Kafka skupnost za pomoč.

Kliknite tukaj za razpravo o čaščenju bogov:Prijava do hiperpovezave je vidna.

Razumemo se, da problem Kafke pod oknom ni tako preprost, kot si predstavljamo.Zaenkrat ni uradne rešitve。 Z drugimi besedami (Ne uporabljajte kafke pod oknom! )

Rešitev 3: A kljub temu potreba po uporabi kafke pod oknom še vedno obstaja, zato je še vedno veliko bogov, ki pozorno poslušajo in predlagajo rešitve. Eden izmed velikih bogov je razvil kafkovo izvorno kodo za ta problem. Po testiranju je njegova rešitev res rešila problem pod oknom, saj je Kafka postala dostopna pod oknom. Vendar pa je Kafkin sodelavec za to rešitev dejal, da morda ni varna (torej popravka ni mogoče vključiti v uradno različico).

4: Reši (na koncu je povezava za prenos prevedenega Kafka paketa)
Čeprav uradniki Kafke pravijo, da obliž ni zelo varen, uradnik do zdaj ni storil ničesar. In povpraševanje obstaja, zato po premisleku še vedno nameravam uporabiti metodo 3, da problem dokončno rešim, zato bomo vstavili popravek in ponovno prevedli kafko.

4.1: Prenos različice popravka Kafka

Prenesite različico Kafka popravka tega avtorja

Prijava do hiperpovezave je vidna.

4.2: Prevedi različico popravka Kafka
Ker se Kafka prevajanje izvaja preko Gradle, morate najprej konfigurirati gradle

Za nastavitev gradle si lahko ogledate ta članek (ponovno natisnjen, kršitev bo izbrisana) Namestitev in konfiguracija gradle pod Windows:Prijava do hiperpovezave je vidna.

Za informacije o tem, kako prevesti Kafko, lahko pogledate github------ Kako prevesti Kafko z uporabo Gradle:Prijava do hiperpovezave je vidna.

Po prevajanju lahko dobiš Kafka paket, ki ga lahko uporabljaš v Windows.

V skladu s konceptom "kopiraj-prilepi" (navsezadnje je prevajanje izvorne kode še vedno precej časovno zahtevno), tukaj je povezava za prenos paketa Kafka, ki sem ga prevedel, in ga lahko prenesete ter uporabljate neposredno.

kafka_2.12-2.3.0_window Naslov za prenos različice proti izpadom:

Prijava do hiperpovezave je vidna.

Izvirna povezava:Prijava do hiperpovezave je vidna.







Prejšnji:MySQL poizveduje po anotacijah tabele podatkovne baze
Naslednji:SQL Server Povzetek particioniranih tabel
Objavljeno na 12. 07. 2021 21:16:33 |
Šef foruma, ki še ni igral, je tako globoko čaščen
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com