See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 14467|Vastuse: 1

Kafka Windowsi süsteem katkeb pärast mõnda aega töötamist

[Kopeeri link]
Postitatud 12.07.2021 10:57:01 | | | |
1: Taust

Kasutasin Kafkat varem Linuxi keskkonnas ja kafkaga endaga probleeme ei olnud. Kuid projekt, millega praegu tegelen, peab olema ühilduv Windowsi ja Linuxiga ning kui kasutan Kafkat Windowsi keskkonnas, avastasin, et Kafka ise ei ühildu Windowsiga nii hästi kui Linux.

2: Probleem

Kui testisin Kafkat Windowsi all, leidsin, et Kafkal oli pärast selle käivitamist teatud aja jooksul viga:

Teine programm kasutab faili ja protsess ei saa sellele ligi.
Järgnevad lahendused ei lahenda probleemi täielikult ega ole soovitatavad

Windows Kafka VIGA Ei õnnestunud __consumer_offsets logi puhastada
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] ERROR Ei õnnestunud puhastada logi __consumer_offsets-42 kohta diris C:\tmp\kafka-logs IOException (kafka.server.LogDirFailureChannel) tõttu
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)
        aadressil sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        aadressil sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        aadressil sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        aadressil java.nio.file.Files.move(Files.java:1395)
        aadressil org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        aadressil kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        at kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        aadressil kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        aadressil kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        aadressil kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        at kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        at kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        aadressil scala.collection.immutable.List.foreach(List.scala:333)
        aadressil kafka.log.Log.replaceSegments(Log.scala:2402)
        aadressil kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        aadressil kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        aadressil kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        aadressil scala.collection.immutable.List.foreach(List.scala:333)
        aadressil kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        aadressil kafka.log.Cleaner.clean(LogCleaner.scala:511)
        aadressil kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        aadressil kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        aadressil kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        aadressil kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        aadressil kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Summutatud: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\ 0000000000000000000000000000.timeindex.swap: Teine programm kasutab seda faili ja protsess on ligipääsmatu.

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

3: Põhjus

Kafka logide puhastamise poliitika käivitab, et Windowsi keskkonnas ei tohi faili ümber nimetada, kui avatakse puhastamist vajav logi (see on võimalik Linuxi keskkonnas), mis põhjustab Kafka krahhi.

Kõige tavalisem lahendus internetis on "tühjendada kafka logifailid ja taaskäivitada kafka", mis on tootmiskeskkonnas ilmselgelt ebarealistlik. Nii et alguses mõtlesin välja järgmised kaks lahendust sellele olukorrale:

Lahendus 1: Muuda logide puhastamise poliitikat nii, et logide puhastamise aeg muutuks lõpmatuks (-1), et salvestada kafka andmelogid püsivalt
Puudused: (1) Ketta ruum kasvab jätkuvalt
Variant 2: Ehita virtuaalmasin Windowsis (docker on sama, aga keerulisem) ja seejärel paigalda Kafka virtuaalmasinasse
Puudused: (1) O&M töötajad peavad teadma Linuxi O&M teadmisi (2) Suurendada mälutarbimist

Ilmselgelt olid mõlema variandi puudused minu jaoks talumatud, nii et pöörasin tähelepanu Kafka kogukonnale abi saamiseks.

Klõpsake siia, et arutada jumalate kummardamist:Hüperlingi sisselogimine on nähtav.

On arusaadav, et Kafka akna all olemise probleem ei ole nii lihtne, kui arvatakse.Ametlikku lahendust pole seni。 Teisisõnu (Ära kasuta kafkat akna all! )

Lahendus 3: Kuid isegi nii on vajadus kasutada kafkat akna all endiselt, nii et paljud jumalad pööravad tähelepanu ja pakuvad lahendusi. Üks suurtest jumalatest on selle probleemi jaoks välja töötanud kafka lähtekoodi. Pärast testimist lahendas tema lahendus akna all oleva probleemi, muutes kafka akna all kättesaadavaks. Kuid selle lahenduse puhul ütles Kafka kaastööline, et see ei pruugi olla turvaline (st plaastrit ei saa ametlikku versiooni integreerida).

4: Lahenda (lõpus on allalaadimislink kompileeritud kafka paketile)
Kuigi Kafka ametnikud ütlevad, et plaaster pole väga ohutu, pole ametnik seni midagi ette võtnud. Ja nõudlus on olemas, nii et pärast mõningast kaalumist plaanin ikkagi kasutada variandi 3 meetodit, et probleem lõplikult lahendada, nii et paneme plaastri sisse ja kompileerime kafka uuesti.

4.1: Kafka plaastri versiooni allalaadimine

Laadi alla selle autori kafka patch versioon

Hüperlingi sisselogimine on nähtav.

4.2: Kafka patchi versiooni kompileerimine
Kuna kafka kompileerimine toimub gradle'i kaudu, tuleb esmalt gradle'i seadistada

Gradle'i seadistamise kohta võid vaadata seda artiklit (trükitud uuesti, rikkumine kustutatakse) Gradle'i paigaldamine ja seadistamine Windowsi all:Hüperlingi sisselogimine on nähtav.

Kafka kompileerimise kohta leiad infot githubist------ Kuidas kompileerida Kafkat Gradle'i abil:Hüperlingi sisselogimine on nähtav.

Pärast kompileerimist saad Kafka paketi, mida saab kasutada Windowsi all.

Kooskõlas "copy-paste" kontseptsiooniga (lõppude lõpuks on lähtekoodi kompileerimine endiselt üsna aeganõudev), siin on allalaadimislink minu kompileeritud kafka paketile, mida saad otse alla laadida ja kasutada.

kafka_2.12-2.3.0_window Allalaadimisaadress seisakuvastase versiooni jaoks:

Hüperlingi sisselogimine on nähtav.

Originaallink:Hüperlingi sisselogimine on nähtav.







Eelmine:MySQL pärib andmebaasitabeli annotatsioone
Järgmine:SQL Serveri partitsioneeritud tabelite kokkuvõte
Postitatud 12.07.2021 21:16:33 |
Foorumi boss, kes pole veel mänginud, on nii sügavalt austatud
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com