Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 14467|Svar: 1

Kafka Windows-systemet vil gå i stå efter at have kørt i en periode

[Kopier link]
Opslået på 12/07/2021 10.57.01 | | | |
1: Baggrund

Jeg brugte Kafka i Linux-miljøet før, og der var ikke noget problem med Kafka selv. Dog skal et projekt, jeg arbejder på i øjeblikket, være kompatibelt med Windows og Linux, og når jeg bruger Kafka i Windows-miljøet, har jeg fundet ud af, at Kafka i sig selv ikke er lige så kompatibel med Windows som Linux.

2: Problem

Da jeg testede Kafka under Window, fandt jeg, at Kafka havde en fejl efter at være blevet startet i en periode:

Et andet program bruger filen, og processen kan ikke få adgang til den.
Følgende løsninger løser ikke problemet fuldstændigt og anbefales ikke

Windows Kafka FEJL Kunne ikke rydde op i logbogen for __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] FEJL Fejlede i at rydde op i logbogen for __consumer_offsets-42 i diret C:\tmp\kafka-logs på grund af 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$adaptered(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.FileSystemUndtagelse: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000.timeindex.clean> C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000000.timeindex.swap: Et andet program bruger denne fil, og processen er utilgængelig.

                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 mere

3: Årsag

Kafka-logrensningspolitikken udløser, at det i Windows-miljøet ikke er tilladt at omdøbe filen, mens den log, der skal renses, åbnes (det er muligt i Linux-miljøet), hvilket får Kafka til at crashe.

Den mest almindelige løsning på internettet er at "tømme logfilerne i kafka og genstarte kafka", hvilket åbenlyst er urealistisk i et produktionsmiljø. Så i begyndelsen fandt jeg på følgende to løsninger på situationen:

Løsning 1: Ændr logoprydningspolitikken for at ændre logoprydningstiden til uendelig (-1) for permanent lagring af kafka-datalogs
Ulemper: (1) Diskpladsen vil fortsætte med at øges
Mulighed 2: Byg en virtuel maskine på Windows (docker er det samme, men mere besværligt), og deploy derefter Kafka i den virtuelle maskine
Ulemper: (1) O&M-personale skal kende noget til Linux O&M-viden (2) Øge hukommelsesforbruget

Selvfølgelig var begge muligheders mangler uudholdelige for mig, så jeg vendte min opmærksomhed mod Kafka-fællesskabet for hjælp.

Klik her for en diskussion om tilbedelse af guderne:Hyperlink-login er synlig.

Det forstås, at problemet med Kafka under vinduet ikke er så let, som man forestiller sig.Der er endnu ingen officiel løsning。 Med andre ord (Brug ikke kafka under vinduet! )

Løsning 3: Men selv da eksisterer behovet for at bruge kafka under vinduet, så der er stadig mange guder, der følger med og foreslår nogle løsninger. En af de store guder har udviklet kafka-kildekoden til dette problem. Efter testning løste hans løsning problemet under vinduet og gjorde kafka tilgængelig under vinduet. For denne løsning sagde Kafkas bidragyder, at den måske ikke er sikker (det vil sige, at patchen ikke kan integreres i den officielle version).

4: Løs (der er et downloadlink til den kompilerede kafka-pakke til sidst)
Selvom Kafka-embedsmænd siger, at patchen ikke er særlig sikker, har embedsmanden indtil videre ikke gjort noget. Og efterspørgslen er der, så efter lidt overvejelse planlægger jeg stadig at bruge metode 3 til at løse problemet én gang for alle, så vi vil sætte patchen i og genkompilere Kafka.

4.1: Kafka patch version download

Download Kafka-patch-versionen af denne forfatter

Hyperlink-login er synlig.

4.2: Kompil Kafka-patch-versionen
Da kafka-kompilering foregår via Gradle, skal du først konfigurere Gradle

For hvordan man konfigurerer gradle, kan du henvise til denne artikel (genoptrykt, overtrædelse vil blive slettet) Installation og konfiguration af gradle under Windows:Hyperlink-login er synlig.

For information om, hvordan man kompilerer Kafka, kan du henvise til github------ Sådan kompilerer du Kafka med Gradle:Hyperlink-login er synlig.

Efter kompilering kan du få en Kafka-pakke, der kan bruges under Windows.

I tråd med konceptet "copy-paste" (det er trods alt stadig ret tidskrævende at kompilere kildekoden), er her et downloadlink til den kafka-pakke, jeg har kompileret, og du kan downloade den og bruge den direkte.

kafka_2.12-2.3.0_window Downloadadresse for anti-nedetid-versionen:

Hyperlink-login er synlig.

Originalt link:Hyperlink-login er synlig.







Tidligere:MySQL forespørger annotationerne i en databasetabel
Næste:Sql Server Summary of Partitioned Tables
Opslået på 12/07/2021 21.16.33 |
Forumbossen, som endnu ikke har spillet, er så dybt tilbedt
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com