kafka没有生产者发送的消息

时间:2019-05-16 14:12:30

标签: apache-kafka apache-zookeeper kafka-producer-api spring-kafka

我使用spring框架和具有3个代理群集的kafka。我发现使用者没有消耗某些消息(假设所有已发送消息之间的消息间隔为0.01%),因此在生产者代码中,我记录了api返回的消息偏移量:

ListenableFuture<SendResult<String, Message>> future = messageTemplate.sendDefault(id, message);
SendResult<String, Message> sendResult = future.get();
String offset = sendResult.getRecordMetadata().offset();

我使用返回偏移量来查询所有分区中的kafka主题,但找不到消息(我测试了与消费者使用的消息相关的其他偏移量,并且它们位于kafka中),这是什么问题,如何确保该消息已发送到卡夫卡?

我还在制作人中使用了messageTemplate.flush();

1 个答案:

答案 0 :(得分:1)

我发现,当Kafka经纪人的主题负责人出现故障时,Kafka将重新平衡自身,而另一个经纪人成为该分区的负责人,并且如果ack配置未设置为all,则有机会在此过程中丢失一些数据。因此将配置更改为

ack=all

此外,如果同步副本的最小值小于2,则可能会丢失数据,因此请将其至少设置为2。

min.insync.replicas = 2