Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14467|Risposta: 1

Il sistema Kafka Windows si blocca dopo essere stato avviato per un certo periodo

[Copiato link]
Pubblicato su 12/07/2021 10:57:01 | | | |
1: Contesto

Ho usato kafka nell'ambiente Linux prima, e non c'era problema con kafka in sé. Tuttavia, un progetto su cui sto lavorando deve essere compatibile con Windows e Linux, e quando uso Kafka nell'ambiente Windows, ho scoperto che Kafka stesso non è compatibile con Windows come Linux.

2: Problema

Testando Kafka sotto Windows, ho scoperto che Kafka aveva un errore dopo il lancio per un certo periodo di tempo:

Un altro programma sta usando il file e il processo non può accedervi.
Le seguenti soluzioni non risolvono completamente il problema e non sono raccomandate

ERRORE Kafka di Windows: Errore non riuscito a pulire il log per __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] ERRORE Non è riuscito a pulire il log per __consumer_offsets-42 in dir C:\tmp\kafka-logs a causa di 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: 另一个程序正在使用此文件,进程无法访问。

        su sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        su sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        su sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        a sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        su java.nio.file.Files.move(Files.java:1395)
        su org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        su kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        at kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        a kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        a kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        a kafka.log.LogSegment.changeFileSuffiss(LogSegment.scala:496)
        a kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        a kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        su scala.collection.immutable.List.foreach(List.scala:333)
        a kafka.log.Log.replaceSegments(Log.scala:2402)
        a kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        a kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        a kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        su scala.collection.immutable.List.foreach(List.scala:333)
        a kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        a kafka.log.Cleaner.clean(LogCleaner.scala:511)
        su kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        a kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        a kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        a kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Soppresso: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000000000.timeindex.swap: Un altro programma utilizza questo file e il processo è inaccessibile.

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

3: Causa

La politica di pulizia dei log di Kafka attiva che nell'ambiente Windows non è permesso rinominare il file durante l'apertura del log che deve essere pulito (è possibile nell'ambiente Linux), causando il crash di Kafka.

La soluzione più comune su Internet è "svuotare i file di log di kafka e riavviare kafka", cosa ovviamente irrealistica in un ambiente di produzione. All'inizio, ho trovato le seguenti due soluzioni per la situazione:

Soluzione 1: Modificare la politica di pulizia dei log per modificare il tempo di pulizia dei log in infinito (-1) per memorizzare permanentemente i log di dati kafka
Svantaggi: (1) Lo spazio su disco continuerà ad aumentare
Opzione 2: Costruire una macchina virtuale su Windows (docker è lo stesso, ma più problematico), e poi distribuire Kafka nella macchina virtuale
Svantaggi: (1) Il personale O&M deve conoscere alcune conoscenze di O&M Linux (2) Aumentare il consumo di memoria

Ovviamente, le carenze di entrambe le opzioni erano insopportabili per me, così ho rivolto la mia attenzione alla comunità di Kafka per chiedere aiuto.

Clicca qui per una discussione sul culto degli dèi:Il login del link ipertestuale è visibile.

Si capisce che il problema di Kafka sotto la finestra non è così semplice come si immagina.Finora non c'è una soluzione ufficiale。 In altre parole (Non usare kafka sotto la finestra! )

Soluzione 3: Ma anche così, la necessità di usare kafka sotto la finestra esiste ancora, quindi ci sono ancora molti dèi che prestano attenzione e propongono alcune soluzioni. Uno dei grandi dei ha sviluppato il codice sorgente kafka per questo problema. Dopo i test, la sua soluzione risolse il problema sotto la finestra, rendendo Kafka disponibile sotto la finestra. Tuttavia, per questa soluzione, il collaboratore di Kafka ha detto che potrebbe non essere sicura (cioè, la patch non può essere integrata nella versione ufficiale).

4: Solve (c'è un link per il download del pacchetto kafka compilato alla fine)
Sebbene i funzionari di Kafka affermino che la toppa non è molto sicura, finora il funzionario non ha fatto nulla. E la domanda esiste, quindi dopo qualche riflessione, ho comunque intenzione di usare il metodo dell'opzione 3 per risolvere il problema una volta per tutte, quindi installeremo la patch e ricompileremo kafka.

4.1: Download versione della patch Kafka

Scarica la versione kafka patch di questo autore

Il login del link ipertestuale è visibile.

4.2: Compila la versione della patch Kafka
Poiché la compilazione kafka avviene tramite gradle, devi configurare gradle prima

Per come configurare Gradle, puoi consultare questo articolo (ristampato, la violazione sarà eliminata) Installazione e configurazione di Gradle su Windows:Il login del link ipertestuale è visibile.

Per informazioni su come compilare Kafka, puoi consultare github------ Come compilare Kafka usando Gradle:Il login del link ipertestuale è visibile.

Dopo aver compilato, puoi ottenere un pacchetto Kafka che può essere usato sotto Windows.

In linea con il concetto di "copia-incolla" (dopotutto, compilare il codice sorgente richiede ancora molto tempo), ecco un link per il download del pacchetto kafka che ho compilato, e puoi scaricarlo e usarlo direttamente.

kafka_2.12-2.3.0_window Indirizzo di download per la versione anti-downtime:

Il login del link ipertestuale è visibile.

Link originale:Il login del link ipertestuale è visibile.







Precedente:MySQL interroga le annotazioni di una tabella di database
Prossimo:Riepilogo delle tabelle partizionate su SQL Server
Pubblicato su 12/07/2021 21:16:33 |
Il boss del forum che non ha ancora giocato è profondamente adorato
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com