Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 14467|Svar: 1

Kafka Windows-systemet kommer att hänga upp efter att ha varit igång en tid

[Kopiera länk]
Publicerad på 2021-07-12 10:57:01 | | | |
1: Bakgrund

Jag använde Kafka i Linux-miljön tidigare, och det fanns inga problem med Kafka själv. Dock måste ett projekt jag arbetar med just nu vara kompatibelt med Windows och Linux, och när jag använder Kafka i Windows-miljön upptäckte jag att Kafka i sig inte är lika kompatibel med Windows som Linux.

2: Problem

När jag testade Kafka under Windows upptäckte jag att Kafka hade ett fel efter att den startats under en period:

Ett annat program använder filen och processen kan inte komma åt den.
Följande lösningar löser inte problemet helt och rekommenderas inte

Windows Kafka FEL Misslyckades med att rensa loggen för __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] FEL: Misslyckades med att rensa loggen för __consumer_offsets-42 i diret C:\tmp\kafka-logs på grund 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)
        på 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)
        Undertryckt: java.nio.file.FileSystemUndantag: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000.timeindex.> C:\tmp\kafka-logs\__consumer_offsets-42\ 000000000000000000000000.timeindex.swap: Ett annat program använder denna fil och processen är otillgänglig.

                på sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
                på 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 till

3: Orsak

Kafkas loggrensningspolicy utlöser att i Windows-miljön är det inte tillåtet att byta namn på filen när loggen öppnas som behöver rensas (det är möjligt i Linux-miljön), vilket gör att Kafka kraschar.

Den vanligaste lösningen på Internet är att "tömma loggfilerna från kafka och starta om kafka", vilket uppenbarligen är orealistiskt i en produktionsmiljö. Så i början kom jag på följande två lösningar för situationen:

Lösning 1: Ändra loggrensningspolicyn för att ändra loggrensningstiden till oändlig (-1) för att permanent lagra kafka-dataloggar
Nackdelar: (1) Diskutrymmet kommer att fortsätta öka
Alternativ 2: Bygg en virtuell maskin på Windows (docker är likadant, men mer besvärlig), och distribuera sedan Kafka i den virtuella maskinen
Nackdelar: (1) O&M-personal behöver kunna viss kunskap om Linux O&M. (2) Öka minnesförbrukningen

Uppenbarligen var bristerna i båda alternativen outhärdliga för mig, så jag vände min uppmärksamhet mot Kafka-gemenskapen för hjälp.

Klicka här för en diskussion om gudadyrkan:Inloggningen med hyperlänken är synlig.

Det är förstått att problemet med Kafka under fönstret inte är så enkelt som man föreställt sig.Det finns ännu ingen officiell lösning。 Med andra ord (Använd inte kafka under fönstret! )

Lösning 3: Men ändå finns behovet av att använda kafka under fönstret, så det finns fortfarande många gudar som uppmärksammar och föreslår lösningar. En av de stora gudarna har utvecklat Kafka-källkoden för detta problem. Efter tester löste hans lösning problemet under fönstret och gjorde Kafka tillgänglig under fönstret. För denna lösning sade dock Kafkas bidragsgivare att det kanske inte är säkert (det vill säga patchen kan inte integreras i den officiella versionen).

4: Lös (det finns en nedladdningslänk för det kompilerade Kafka-paketet i slutet)
Även om Kafka-tjänstemän säger att lappen inte är särskilt säker, har tjänstemannen hittills inte gjort något. Och efterfrågan finns, så efter lite övervägande planerar jag fortfarande att använda metoden alternativ 3 för att lösa problemet en gång för alla, så vi kommer att lägga in patchen och kompilera om Kafka.

4.1: Kafka patch version nedladdning

Ladda ner kafkapatch-versionen av denna författare

Inloggningen med hyperlänken är synlig.

4.2: Kompylera Kafka-patchversionen
Eftersom kafka-kompilering görs via Gradle måste du konfigurera Gradle först

För hur man konfigurerar gradle kan du hänvisa till denna artikel (återutgiven, överträdelsen kommer att tas bort) Installation och konfiguration av gradle under Windows:Inloggningen med hyperlänken är synlig.

För information om hur man kompilerar Kafka kan du hänvisa till github------ Hur man kompilerar Kafka med Gradle:Inloggningen med hyperlänken är synlig.

Efter kompilering kan du få ett Kafka-paket som kan användas under Windows.

I linje med konceptet "kopiera-klistra" (det är trots allt fortfarande ganska tidskrävande att kompilera källkoden), här är en nedladdningslänk för kafka-paketet som jag kompilerade, och du kan ladda ner det och använda det direkt.

kafka_2.12-2.3.0_window Nedladdningsadress för anti-drifttid-versionen:

Inloggningen med hyperlänken är synlig.

Originallänk:Inloggningen med hyperlänken är synlig.







Föregående:MySQL frågar annotationerna i en databastabell
Nästa:SQL Server Sammanfattning av partitionerade tabeller
Publicerad på 2021-07-12 21:16:33 |
Forumbossen som ännu inte har spelat är så djupt dyrkad
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com