Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 14467|Svare: 1

Kafka Windows-systemet henger seg opp etter å ha kjørt en periode

[Kopier lenke]
Publisert på 12.07.2021 10:57:01 | | | |
1: Bakgrunn

Jeg brukte Kafka i Linux-miljøet før, og det var ikke noe problem med Kafka i seg selv. Men et prosjekt jeg jobber med nå må være kompatibelt med Windows og Linux, og når jeg bruker Kafka i Windows-miljøet, oppdaget jeg at Kafka i seg selv ikke er like kompatibel med Windows som Linux.

2: Problem

Da jeg testet Kafka under Window, fant jeg ut at Kafka hadde en feil etter at den var startet i en periode:

Et annet program bruker filen, men prosessen får ikke tilgang til den.
Følgende løsninger løser ikke problemet fullstendig og anbefales ikke

Windows Kafka FEIL Klarte ikke å rydde loggen for __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] FEIL: Klarte ikke å rydde loggen for __consumer_offsets-42 i dir: C:\tmp\kafka-logs på grunn av 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: 另一个程序正在使用此文件,进程无法访问。

        på sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        på sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        på sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        på java.nio.file.Files.move(Files.java:1395)
        på org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        på kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        på kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        på kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        på kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        på kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        på kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        på kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        på scala.collection.immutable.List.foreach(List.scala:333)
        på kafka.log.Log.replaceSegments(Log.scala:2402)
        på kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        på kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        på kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        på scala.collection.immutable.List.foreach(List.scala:333)
        på kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        på kafka.log.Cleaner.clean(LogCleaner.scala:511)
        på kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        på kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        på kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        på kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        på kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Undertrykt: java.nio.file.FileSystemUnntak: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000.timeindex.clean> C:\tmp\kafka-logs\__consumer_offsets-42\ 000000000000000000000000.timeindex.swap: Et annet program bruker denne filen, og prosessen er utilgjengelig.

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

3: Årsak

Kafka-loggrensingspolicyen utløser at i Windows-miljøet er det ikke tillatt å omdøpe filen mens loggen som må renses åpnes (det er mulig i Linux-miljøet), noe som får Kafka til å krasje.

Den vanligste løsningen på Internett er å «tømme loggfilene til kafka og starte kafka på nytt», noe som åpenbart er urealistisk i et produksjonsmiljø. Så i begynnelsen kom jeg opp med følgende to løsninger for situasjonen:

Løsning 1: Endre loggryddingspolicyen for å endre loggryddingstiden til uendelig (-1) for å lagre kafka-datalogger permanent
Ulemper: (1) Diskplassen vil fortsette å øke
Alternativ 2: Bygg en virtuell maskin på Windows (docker er det samme, men mer plagsomt), og deployer deretter Kafka i den virtuelle maskinen
Ulemper: (1) O&M-personell må kunne noe Linux-O&M-kunnskap (2) Øke minneforbruket

Selvfølgelig var svakhetene ved begge alternativene uutholdelige for meg, så jeg vendte oppmerksomheten mot Kafka-samfunnet for hjelp.

Klikk her for en diskusjon om å tilbe gudene:Innloggingen med hyperkoblingen er synlig.

Det er forstått at problemet med Kafka under vinduet ikke er så lett som man trodde.Det finnes foreløpig ingen offisiell løsning。 Med andre ord (Ikke bruk kafka under vinduet! )

Løsning 3: Men selv da eksisterer behovet for å bruke kafka under vinduet fortsatt, så det er fortsatt mange guder som følger med og foreslår noen løsninger. En av de store gudene har utviklet kafka-kildekoden for dette problemet. Etter testing løste løsningen hans problemet under vinduet, og gjorde Kafka tilgjengelig under vinduet. For denne løsningen sa imidlertid Kafkas bidragsyter at den kanskje ikke er trygg (det vil si at patchen ikke kan integreres i den offisielle versjonen).

4: Løs (det finnes en nedlastingslenke til den kompilerte Kafka-pakken på slutten)
Selv om Kafka-tjenestemenn sier at patchen ikke er særlig trygg, har tjenestemannen ikke gjort noe så langt. Og etterspørselen finnes, så etter litt overveielse planlegger jeg fortsatt å bruke metode fra alternativ 3 for å løse problemet en gang for alle, så vi legger inn patchen og kompilerer Kafka på nytt.

4.1: Kafka patch-versjon nedlasting

Last ned kafka-patch-versjonen av denne forfatteren

Innloggingen med hyperkoblingen er synlig.

4.2: Kompil Kafka-patchversjonen
Siden kafka-kompilering gjøres via Gradle, må du konfigurere Gradle først

For hvordan du konfigurerer gradle, kan du se denne artikkelen (gjenuttrykt, brudd vil bli slettet) Installasjon og konfigurasjon av gradle under Windows:Innloggingen med hyperkoblingen er synlig.

For informasjon om hvordan du kompilerer Kafka, kan du se github------ Hvordan kompilere Kafka med Gradle:Innloggingen med hyperkoblingen er synlig.

Etter kompilering kan du få en Kafka-pakke som kan brukes under Windows.

I tråd med konseptet «kopier-lim» (tross alt er det fortsatt ganske tidkrevende å kompilere kildekoden), her er en nedlastingslenke til kafka-pakken jeg kompilerte, og du kan laste den ned og bruke den direkte.

kafka_2.12-2.3.0_window Nedlastingsadresse for anti-nedetid-versjonen:

Innloggingen med hyperkoblingen er synlig.

Original lenke:Innloggingen med hyperkoblingen er synlig.







Foregående:MySQL spør annotasjonene i en databasetabell
Neste:SQL Server-oppsummering av partisjonerte tabeller
Publisert på 12.07.2021 21:16:33 |
Forumsjefen som ikke har spilt ennå er så dypt tilbedt
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com