Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 14467|Répondre: 1

Le système Kafka Windows se bloque après un certain temps d’exécution

[Copié le lien]
Publié sur 12/07/2021 10:57:01 | | | |
1 : Contexte

J’ai utilisé kafka dans l’environnement Linux auparavant, et il n’y avait aucun problème avec kafka lui-même. Cependant, un projet sur lequel je travaille actuellement doit être compatible avec Windows et Linux, et lorsque j’utilise Kafka dans l’environnement Windows, j’ai constaté que Kafka lui-même n’est pas aussi compatible avec Windows que Linux.

2 : Problème

En testant Kafka sous Windows, j’ai constaté que Kafka avait une erreur après son lancement pendant un certain temps :

Un autre programme utilise le fichier et le processus ne peut pas y accéder.
Les solutions suivantes ne résolvent pas complètement le problème et ne sont pas recommandées

ERREUR Kafka Windows : Échec à nettoyer le journal pour __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] ERREUR : Échec de nettoyer le journal pour __consumer_offsets-42 dans le dir : C :\tmp\kafka-logs à cause de 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: 另一个程序正在使用此文件,进程无法访问。

        at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java :86)
        sur sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java :97)
        sur sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java :387)
        at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java :287)
        sur java.nio.file.Files.move(Files.java :1395)
        sur org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java :904)
        à kafka.log.AbstractIndex.renameTo(AbstractIndex.scala :210)
        at kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala :155)
        at kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala :79)
        à kafka.log.LazyIndex.renameTo(LazyIndex.scala :79)
        à kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala :496)
        à kafka.log.Log.$anonfun$replaceSegments$4(Log.scala :2402)
        à kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala :2402)
        sur scala.collection.immutable.List.foreach(List.scala :333)
        à kafka.log.Log.replaceSegments(Log.scala :2402)
        à kafka.log.Cleaner.cleanSegments(LogCleaner.scala :613)
        à kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala :538)
        à kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala :537)
        sur scala.collection.immutable.List.foreach(List.scala :333)
        à kafka.log.Cleaner.doClean(LogCleaner.scala :537)
        à kafka.log.Cleaner.clean(LogCleaner.scala :511)
        sur kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala :380)
        à kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala :352)
        à kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala :332)
        à kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala :321)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala :96)
        Supprimé : java.nio.file.FileSystemException : C :\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000000.timeindex.cleaned -> C :\tmp\kafka-logs\__consumer_offsets-42\ 0000000000000000000000000.timeindex.swap : Un autre programme utilise ce fichier et le processus est inaccessible.

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

3 : Cause

La politique de nettoyage de journal de Kafka déclenche que, dans l’environnement Windows, il est interdit de renommer le fichier lors de l’ouverture du journal à nettoyer (ce qui est possible dans l’environnement Linux), ce qui provoque le plantage de Kafka.

La solution la plus courante sur Internet est de « vider les fichiers journaux de kafka et de redémarrer kafka », ce qui est évidemment irréaliste en production. Au début, j’ai donc proposé les deux solutions suivantes à la situation :

Solution 1 : Modifier la politique de nettoyage des journaux pour modifier le temps de nettoyage des journaux à infini (-1) afin de stocker de façon permanente les journaux de données kafka
Inconvénients : (1) L’espace disque continuera d’augmenter
Option 2 : Construire une machine virtuelle sous Windows (docker est le même, mais plus problématique), puis déployer Kafka dans la machine virtuelle
Inconvénients : (1) Le personnel O&M doit connaître certaines connaissances en O&M Linux (2) Augmentation de la consommation de mémoire

Évidemment, les défauts des deux options étaient insupportables pour moi, alors j’ai tourné mon attention vers la communauté Kafka pour obtenir de l’aide.

Cliquez ici pour une discussion sur le culte des dieux :La connexion hyperlientérée est visible.

Il est compris que le problème de Kafka sous la fenêtre n’est pas aussi simple qu’on l’imagine.Il n’existe pas encore de solution officielle。 En d’autres termes (N’utilisez pas de kafka sous la fenêtre! )

Solution 3 : Mais même ainsi, le besoin d’utiliser kafka sous la fenêtre persiste, donc de nombreux dieux y prêtent attention et proposent des solutions. L’un des grands dieux a développé le code source kafka pour ce problème. Après test, sa solution a résolu le problème sous la fenêtre, rendant kafka disponible sous la fenêtre. Cependant, pour cette solution, le contributeur de Kafka a indiqué qu’elle pourrait ne pas être sûre (c’est-à-dire que le correctif ne peut pas être intégré à la version officielle).

4 : Résoudre (il y a un lien de téléchargement pour le package kafka compilé à la fin)
Bien que les responsables de Kafka affirment que le patch n’est pas très sûr, le responsable n’a rien fait jusqu’à présent. Et la demande existe, donc après réflexion, je prévois toujours d’utiliser la méthode de l’option 3 pour résoudre le problème une bonne fois pour toutes, donc nous allons mettre le patch et recompiler kafka.

4.1 : téléchargement de la version du patch Kafka

Téléchargez la version kafka patch de cet auteur

La connexion hyperlientérée est visible.

4.2 : Compiler la version du correctif Kafka
Puisque la compilation kafka se fait via Gradle, vous devez configurer Gradle First

Pour savoir comment configurer Gradle, vous pouvez vous référer à cet article (réimprimé, la contrefaçon sera supprimée) Installation et configuration de Gradle sous Windows :La connexion hyperlientérée est visible.

Pour des informations sur la façon de compiler Kafka, vous pouvez vous référer à github------ Comment compiler Kafka avec Gradle :La connexion hyperlientérée est visible.

Après compilation, vous pouvez obtenir un paquet Kafka qui peut être utilisé sous Windows.

Conformément au concept de « copier-coller » (après tout, compiler le code source reste assez chronophage), voici un lien de téléchargement pour le paquet kafka que j’ai compilé, et vous pouvez le télécharger et l’utiliser directement.

kafka_2.12-2.3.0_window Adresse de téléchargement pour la version anti-arrêt :

La connexion hyperlientérée est visible.

Lien original :La connexion hyperlientérée est visible.







Précédent:MySQL interroge les annotations d’une table de base de données
Prochain:Résumé des tables partitionnées sur Sql Server
Publié sur 12/07/2021 21:16:33 |
Le boss du forum qui n’a pas encore joué est profondément vénéré
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com