Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 14467|Atsakyti: 1

"Kafka Windows" sistema tam tikrą laiką užstrigs

[Kopijuoti nuorodą]
Paskelbta 2021-07-12 10:57:01 | | | |
1. Pagrindiniai faktai

Anksčiau naudojau kafką Linux aplinkoje, o su pačia kafka problemų nebuvo. Tačiau projektas, prie kurio šiuo metu dirbu, turi būti suderinamas su "Windows" ir "Linux", o kai naudoju "Kafka" "Windows" aplinkoje, pastebėjau, kad pati "Kafka" nėra tokia suderinama su "Windows" kaip "Linux".

2: Problema

Bandydamas "Kafka" sistemoje "Windows", pastebėjau, kad "Kafka" turėjo klaidą po to, kai jis buvo paleistas tam tikrą laiką:

Failą naudoja kita programa ir procesas negali jo pasiekti.
Šie sprendimai visiškai neišsprendžia problemos ir nėra rekomenduojami

Windows Kafka KLAIDA Nepavyko išvalyti __consumer_offsets žurnalo
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] KLAIDA Nepavyko išvalyti __consumer_offsets-42 žurnalo kataloge C:\tmp\kafka-logs dėl 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: 另一个程序正在使用此文件,进程无法访问。

        adresu sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        adresu sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        adresu sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        adresu sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        java.nio.file.Files.move(Files.java:1395)
        adresu org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        adresu kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        adresu kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        adresu kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        adresu kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        adresu kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        adresu kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        adresu scala.collection.immutable.List.foreach(List.scala:333)
        adresu kafka.log.Log.replaceSegments(Log.scala:2402)
        adresu kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        adresu kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        adresu kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        adresu scala.collection.immutable.List.foreach(List.scala:333)
        adresu kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        adresu kafka.log.Cleaner.clean(LogCleaner.scala:511)
        adresu kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        adresu kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        adresu kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        adresu kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        adresu kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Slopinta: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\ 0000000000000000000000000000.timeindex.swap: Šį failą naudoja kita programa ir procesas nepasiekiamas.

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

3: Priežastis

"Kafka" žurnalo valymo politika suaktyvina, kad "Windows" aplinkoje neleidžiama pervardyti failo atidarant žurnalą, kurį reikia išvalyti (tai įmanoma "Linux" aplinkoje), todėl "Kafka" sugenda.

Dažniausias sprendimas internete yra "ištuštinti kafkos žurnalo failus ir iš naujo paleisti kafką", o tai akivaizdžiai nerealu gamybos aplinkoje. Taigi pradžioje sugalvojau šiuos du situacijos sprendimus:

1 sprendimas: pakeiskite žurnalo valymo strategiją, kad pakeistumėte žurnalo valymo laiką į begalinį (-1), kad kafkos duomenų žurnalai būtų saugomi visam laikui
Trūkumai: (1) Vieta diske ir toliau didės
2 variantas: sukurkite virtualią mašiną sistemoje "Windows" (docker yra tas pats, bet varginantis), tada įdiekite Kafką virtualioje mašinoje
Trūkumai: (1) O&M personalas turi žinoti kai kurias Linux O&M žinias (2) Padidinkite atminties sunaudojimą

Akivaizdu, kad abiejų variantų trūkumai man buvo nepakeliami, todėl kreipiausi pagalbos į Kafkos bendruomenę.

Spauskite čia diskusijai apie dievų garbinimą:Hipersaito prisijungimas matomas.

Suprantama, kad Kafkos problema po langu nėra tokia lengva, kaip įsivaizduojama.Kol kas nėra oficialaus sprendimo。 Kitaip tariant (Nenaudokite kafkos po langu! )

3 sprendimas: Tačiau net ir tokiu atveju poreikis naudoti kafką po langu vis dar egzistuoja, todėl vis dar yra daug dievų, kurie atkreipia dėmesį ir siūlo kai kuriuos sprendimus. Vienas iš didžiųjų dievų sukūrė kafkos šaltinio kodą šiai problemai. Po bandymų jo sprendimas išsprendė problemą po langu, todėl kafka buvo prieinama po langu. Tačiau šiam sprendimui Kafkos bendraautorius teigė, kad jis gali būti nesaugus (tai yra, pataisos negalima integruoti į oficialią versiją).

4: Išspręskite (pabaigoje yra sukompiliuoto kafkos paketo atsisiuntimo nuoroda)
Nors Kafkos pareigūnai teigia, kad pleistras nėra labai saugus, pareigūnas iki šiol nieko nepadarė. Ir paklausa egzistuoja, todėl po tam tikrų svarstymų, aš vis dar planuoju naudoti 3 varianto metodą, kad išspręstume problemą kartą ir visiems laikams, todėl mes įdėsime pleistrą ir iš naujo kompiliuosime kafką.

4.1: Kafka pataisos versijos atsisiuntimas

Atsisiųskite šio autoriaus kafkos pleistro versiją

Hipersaito prisijungimas matomas.

4.2: Kompiliuokite Kafkos pataisos versiją
Kadangi kafkos kompiliavimas atliekamas per gradle, pirmiausia turite sukonfigūruoti gradle

Norėdami sužinoti, kaip sukonfigūruoti gradle, galite peržiūrėti šį straipsnį (perspausdintas, pažeidimas bus ištrintas) Gradle diegimas ir konfigūravimas sistemoje Windows:Hipersaito prisijungimas matomas.

Norėdami gauti informacijos apie tai, kaip kompiliuoti Kafką, galite kreiptis į github------ Kaip kompiliuoti Kafką naudojant Gradle:Hipersaito prisijungimas matomas.

Sukompiliavę galite gauti "Kafka" paketą, kurį galima naudoti sistemoje "Windows".

Pagal "kopijavimo-įklijavimo" koncepciją (juk šaltinio kodo sudarymas vis dar užima gana daug laiko), čia yra mano sudaryto kafkos paketo atsisiuntimo nuoroda, kurią galite atsisiųsti ir naudoti tiesiogiai.

kafka_2.12-2.3.0_window Anti-prastovos versijos atsisiuntimo adresas:

Hipersaito prisijungimas matomas.

Originali nuoroda:Hipersaito prisijungimas matomas.







Ankstesnis:"MySQL" užklausia duomenų bazės lentelės komentarus
Kitą:"SQL Server" skaidytų lentelių suvestinė
Paskelbta 2021-07-12 21:16:33 |
Forumo bosas, kuris dar nežaidė, yra taip giliai garbinamas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com