Pourquoi n'est-ce pas kafka en continuant à travailler sur l'échec de l'un des courtiers?
J'ai l'impression qu'avec deux courtiers avec sync activé sur mon kafka le programme d'installation doit continuer à travailler même sur l'échec de l'un des courtier en.
Pour le tester j'ai fait une nouvelle rubrique nommée topicname. Sa description est la suivante:
Topic:topicname PartitionCount:1 ReplicationFactor:1 Configs:
Topic: topicname Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Ensuite, j'ai couru producer.sh et consumer.sh de la manière suivante:
bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9095 sync --topic topicname
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topicname --from-beginning
Jusqu'à la fois les courtiers étaient de travail, j'ai vu que les messages ont été reçus correctement par le consommateur, mais quand j'ai tué l'un de l'instance de l'courtiers kill
commande, le consommateur a de cesse de montrer-moi de tous les nouveaux messages. Au lieu de cela il m'a montré le message d'erreur suivant:
WARN [ConsumerFetcherThread-console-consumer-57116_ip-<internalipvalue>-1438604886831-603de65b-0-0], Error in fetch Name: FetchRequest; Version: 0; CorrelationId: 865; ClientId: console-consumer-57116; ReplicaId: -1; MaxWait: 100 ms; MinBytes: 1 bytes; RequestInfo: [topicname,0] -> PartitionFetchInfo(9,1048576). Possible cause: java.nio.channels.ClosedChannelException (kafka.consumer.ConsumerFetcherThread)
[2015-08-03 12:29:36,341] WARN Fetching topic metadata with correlation id 1 for topics [Set(topicname)] from broker [id:0,host:<hostname>,port:9092] failed (kafka.client.ClientUtils$)
java.nio.channels.ClosedChannelException
at kafka.network.BlockingChannel.send(BlockingChannel.scala:100)
at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73)
at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72)
at kafka.producer.SyncProducer.send(SyncProducer.scala:113)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:58)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:93)
at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60)
J'ai essayé de réglage de la réplication à 2. Quand j'ai tué l'un des courtier, j'ai obtenu l'erreur suivante
kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
OriginalL'auteur Sumit Sinha | 2015-08-03
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce genre de problème, le réglage du producteur config "rubrique.les métadonnées.actualiser.d'intervalle.ms" -1 (ou quelle que soit la valeur est adapté pour vous) a résolu le problème pour moi.
Donc dans mon cas , j'ai eu 3 broker (courtier multi est configuré sur ma machine locale) et a créé le sujet avec 3 partitions et facteur de réplication 2.
Le Test mis en place:
Avant que le producteur config:
Essayé 3 courtiers en cours d'exécution , a tué l'un des courtiers d'après le producteur a commencé, le local Zookeeper mise à jour de l'ISR et de sujet de métadonnées info (enlevé le bas courtier à titre de chef de file), mais le producteur n'a pas le ramasser (peut-être en raison de défaut de 10 minutes le temps de rafraîchissement).Donc les messages finissent par défaut. J'envoie des exceptions.
Après le producteur de config (-1 dans mon cas):
Essayé 3 courtiers en cours d'exécution , a tué l'un des courtiers d'après le producteur a commencé, la Gardienne d'animaux mis à jour le rapport de recherche internationale info (enlevé le bas courtier à titre de chef de file), le producteur actualisé le nouveau ISR/sujet métadonnées info et envoyer des messages n'a pas manqué.
-1 permet d'actualiser sujet de métadonnées sur chaque tentative a échoué, donc peut-être vous voulez réduire le temps de rafraîchissement à quelque chose de raisonnable à la place.
OriginalL'auteur Gaurav
Vous pouvez voir dans la description du sujet que vous avez posté votre sujet n'a qu'une seule réplique.
Avec un seul réplica il n'y a pas de tolérance de panne et si le courtier 0 (le courtier qui contient la réplique) s'en va, le sujet ne sera pas disponible.
Créer un topic avec plus de répliques (avec
--replication-factor 3
) pour avoir une tolérance de panne en cas de collision.OriginalL'auteur Gwen Shapira
Je pense qu'il y a deux choses qui peuvent rendre votre consommateur de ne plus fonctionner après un courtier en bas de kafka cluster HA:
--la réplication facteur plus grand que 1 pour votre sujet. ainsi, chaque sujet partition peut avoir au moins une sauvegarde.
facteur de réplication interne sujets de kafka configuration devrait également plus grand que 1:
décalages.sujet.la réplication.facteur = 3
transaction.état.journal.la réplication.facteur = 3
transaction.état.journal.min.isr = 2
Ce deux la modification d'un de mes producteurs et des consommateurs fonctionnent toujours après courtier d'arrêt (5 courtier et chaque courtier va vers le bas une fois) .
ruby-kafka
ruby gem pour les tests. D'autres clients peuvent être plus intelligent.OriginalL'auteur EricOops
J'avais couru dans le même problème, même lors de l'utilisation d'un sujet avec la réplication facteur de 2.
Le réglage de la propriété suivante sur le producteur a travaillé pour moi.
"les métadonnées.max.l'âge.ms". (Kafka-0.8.2.1)
D'autre, mon Producteur a été en attente pendant 1 minute par défaut pour aller chercher le nouveau leader et commencer à communiquer avec elle
OriginalL'auteur user3881282
Pour un topic avec facteur de réplication N, Kafka tolérer jusqu'à N-1 de défaillance du serveur. E. g. ayant un facteur de réplication 3 vous permettra de gérer jusqu'à 2 défaillance du serveur.
kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
qu'est-ce exactement que vous avez fait ? êtes-vous en mesure de faire la liste des sujets à l'aide de la console de script ? êtes-vous en mesure de créer un nouveau sujet et de publier des documents ? quel est le détail de l'exception que vous obtenez ?
OriginalL'auteur user2720864