0

J'utilise Kafka 0.10.2.0. J'ai 3 courtiers et je fais des tests de basculement. Parfois, lorsque l'un des courtiers kafka est fermé de façon disgracieuse, je perds des données. configuration du courtier Kafka:Kafka Comment éviter la perte de données sur les courtiers

zookeeper.connection.timeout.ms=6000 
num.partitions=50 
min.insync.replicas=2 
unclean.leader.election.enable=false 
group.max.session.timeout.ms=10000 
group.min.session.timeout.ms=1000 

configuration des consommateurs:

props.put(ConsumerConfig.GROUP_ID_CONFIG, getTopicName() + "group"); 
props.put(ConsumerConfig.CLIENT_ID_CONFIG, getClientId()); 
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); 
props.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, 30000); 
props.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 500); 
props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 3000); 

Configuration du producteur:

props.put(ProducerConfig.LINGER_MS_CONFIG, 1); 
props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432); 
props.put(ProducerConfig.MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION, 1); 
props.put(ProducerConfig.CLIENT_ID_CONFIG, getClientId()); 
props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 800); 
props.put(ProducerConfig.RETRIES_CONFIG, Integer.MAX_VALUE); 
props.put(ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG, 800); 

Que puis-je faire pour arrêter de perdre des données sur les courtiers kafka?

+0

set config = producteur 'ACKs all' Voir http://kafka.apache.org/documentation/#producerconfigs –

+0

J'ai déjà ajouté des acks tous aux producteurs. – melihcoskun

+0

Avec l'élection leader malpropre désactivé, et acks = tout vous ne devriez perdre aucune donnée. Si vous pouvez reproduire ce scénario de manière fiable, signalez un bug potentiel à [email protected] (http://kafka.apache.org/contact) ou ouvrez un Jira: https://issues.apache.org/jira/browse/KAFKA-1? jql = projet% 20% 3D% 20KAFKA –

Répondre

1
+0

Oui, tous les sujets ont le facteur de réplication 3. J'ai déjà vérifié la diapositive. J'utilise autocommit false et je n'ai aucun problème pour valider le message. Je suis sûr que le producteur envoie le message aux sujets correctement. Mais après cela, lorsque le courtier est en panne, je perds des données. Cela n'a pas toujours été le cas mais en faisant les tests comme: commencer à envoyer des messages à kafka, fermer un des courtiers puis l'ouvrir à nouveau puis fermer l'autre courtier ... Je perds des données sur ces cas. – melihcoskun

+0

Comment savez-vous que les données sont perdues? Si vous consommez des messages depuis le début de la compensation en utilisant console-consumer, les données ne se trouvent plus dans le journal Kafka? Si vous revenez au courtier d'origine sont les messages toujours là? –

+0

Je ne démarre pas le décalage depuis le début, j'utilise le commit manuel avec commitSync.Strategy = le plus tôt. Je sais que les données sont perdues parce que dans les journaux, je peux voir les messages déjà livrés aux courtiers. Donc quand j'ai des messages sur des sujets de kafka et que j'ai recommencé le courtier de kafka, du côté des consommateurs quand j'appelle la méthode de sondage, je peux voir que certains messages sont ignorés. Peut-être que la position décalée a été changée mais pourquoi ou que devrais-je faire? – melihcoskun