Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14467|Răspunde: 1

Sistemul Kafka Windows se va bloca după ce a funcționat o perioadă de timp

[Copiază linkul]
Postat pe 12.07.2021 10:57:01 | | | |
1: Context

Am folosit kafka în mediul Linux înainte și nu a fost nicio problemă cu kafka în sine. Totuși, un proiect la care lucrez în prezent trebuie să fie compatibil cu Windows și Linux, iar când folosesc Kafka în mediul Windows, am constatat că Kafka în sine nu este la fel de compatibil cu Windows ca Linux.

2: Problemă

Când am testat Kafka sub Window, am descoperit că Kafka a avut o eroare după ce a fost lansat pentru o perioadă de timp:

Un alt program folosește fișierul, iar procesul nu poate avea acces la el.
Următoarele soluții nu rezolvă complet problema și nu sunt recomandate

Windows Kafka ERROR Nu a reușit să curețe jurnalul pentru __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] EROARE: Eșecul de a curăța jurnalul pentru __consumer_offsets-42 în dir: C:\tmp\kafka-logs din cauza 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: 另一个程序正在使用此文件,进程无法访问。

        la sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        la sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        la sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        la sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        la java.nio.file.Files.move(Files.java:1395)
        la org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        la kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        la kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        la kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        la kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        la kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        la kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        la kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        la scala.collection.immutable.List.foreach(List.scala:333)
        la kafka.log.Log.replaceSegments(Log.scala:2402)
        la kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        la kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        la kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        la scala.collection.immutable.List.foreach(List.scala:333)
        la kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        la kafka.log.Cleaner.clean(LogCleaner.scala:511)
        la kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        la kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        la kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        la kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        la kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Suprimat: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000000000.timeindex.swap: Un alt program folosește acest fișier și procesul este inaccesibil.

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

3: Cauză

Politica de curățare a logurilor Kafka declanșează faptul că, în mediul Windows, nu este permis să redenumești fișierul la deschiderea jurnalului care trebuie curățat (este posibil în mediul Linux), ceea ce duce la blocarea lui Kafka.

Cea mai comună soluție pe Internet este să "golești fișierele de jurnal ale kafka și să repornești kafka", ceea ce este evident nerealist într-un mediu de producție. Așa că, la început, am venit cu următoarele două soluții pentru situație:

Soluția 1: Modifică politica de curățare a jurnalelor pentru a schimba timpul de curățare a logurilor la infinit (-1) pentru a stoca permanent jurnalele de date kafka
Dezavantaje: (1) Spațiul pe disc va continua să crească
Opțiunea 2: Construiește o mașină virtuală pe Windows (docker este la fel, dar mai problematic), apoi implementează Kafka în mașina virtuală
Dezavantaje: (1) Personalul O&M trebuie să cunoască unele cunoștințe Linux O&M (2) Creșterea consumului de memorie

Evident, lipsurile ambelor opțiuni erau insuportabile pentru mine, așa că mi-am îndreptat atenția către comunitatea Kafka pentru ajutor.

Click aici pentru o discuție despre închinarea zeilor:Autentificarea cu hyperlink este vizibilă.

Se înțelege că problema lui Kafka de sub fereastră nu este atât de simplă pe cât se imaginează.Până acum nu există o soluție oficială。 Cu alte cuvinte (Nu folosi kafka sub fereastră! )

Soluția 3: Dar chiar și așa, nevoia de a folosi kafka sub fereastră încă există, așa că mai sunt mulți zei care sunt atenți și propun unele soluții. Unul dintre marii zei a dezvoltat codul sursă kafka pentru această problemă. După testare, soluția lui a rezolvat problema de sub fereastră, făcând kafka disponibilă sub fereastră. Totuși, pentru această soluție, contributorul lui Kafka a spus că s-ar putea să nu fie sigură (adică patch-ul nu poate fi integrat în versiunea oficială).

4: Rezolvă (există un link de descărcare pentru pachetul compilat kafka la final)
Deși oficialii Kafka spun că plasturele nu este foarte sigur, oficialul nu a făcut nimic până acum. Și cererea există, așa că, după o analiză, plănuiesc în continuare să folosesc metoda opțiunii 3 pentru a rezolva problema odată pentru totdeauna, așa că vom implementa patch-ul și vom recompila kafka.

4.1: Descărcare versiune a patch-ului Kafka

Descarcă versiunea cu patch-ul kafka a acestui autor

Autentificarea cu hyperlink este vizibilă.

4.2: Compila versiunea patch-ului Kafka
Deoarece compilarea kafka se face prin gradle, trebuie să configurezi gradle mai întâi

Pentru cum să configurezi gradle, poți consulta acest articol (reeditat, încălcarea va fi ștearsă) Instalarea și configurarea gradle sub Windows:Autentificarea cu hyperlink este vizibilă.

Pentru informații despre cum să compilezi Kafka, poți consulta github------ Cum să compilezi Kafka folosind Gradle:Autentificarea cu hyperlink este vizibilă.

După compilare, poți obține un pachet Kafka care poate fi folosit sub Windows.

În conformitate cu conceptul de "copy-paste" (până la urmă, compilarea codului sursă este încă destul de consumatoare de timp), iată un link de descărcare pentru pachetul kafka pe care l-am compilat și îl puteți descărca și folosi direct.

kafka_2.12-2.3.0_window Adresă de descărcare pentru versiunea anti-downtime:

Autentificarea cu hyperlink este vizibilă.

Link original:Autentificarea cu hyperlink este vizibilă.







Precedent:MySQL interogează adnotările unui tabel de bază de date
Următor:Rezumat Sql Server al tabelelor partiționate
Postat pe 12.07.2021 21:16:33 |
Boss-ul de pe forum care încă nu a jucat este atât de profund venerat
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com