卡夫卡记录已确认,但没有数据返回给消费者

时间:2019-05-29 05:49:52

标签: apache-kafka

有一个由3个节点组成的Kafka(版本2.2.0)集群。一个节点人为地不可用(网络断开)。然后,我们有以下行为:

  1. 我们将记录发送给具有给定主题分区(到特定分区,例如#0)的生产者。

  2. 我们从生产者那里收到记录元数据,该数据确认已被确认。

  3. 此后,我们立即轮询分配给相同主题分区的消费者,并从记录的元数据中获取一个偏移量。轮询超时设置为30秒。不返回任何数据(返回一个空集)。

这种情况有时会不一致(在描述的情况下,一个Kafka节点发生故障)。

从本质上来说,我的问题是:是否应该立即向确认的消费者提供数据?如果没有,合理的超时时间是多少?

UPD:一些配置详细信息:

  • 该主题的分区数:1
  • 默认复制因子:3
  • 同步复制因子:2
  • 制作人致谢:全部

1 个答案:

答案 0 :(得分:1)

生产者上的默认设置acks1。这意味着生产者仅等待领导者副本的确认。如果领导者在确认后立即去世,则消息将不会传递。

是否应该立即为消费者提供数据?是的,通常每个默认值的延迟应该很小,每个默认值的有效范围应该在毫秒范围内并且没有负载。

如果要确保消息不会丢失,除了min.insync.replicas = 2之外,还必须将生产者配置为“ acks = all”。这将确保所有同步副本均确认该消息,并且确保至少有2个节点可以。因此,仍然允许您丢失一个节点并罚款。丢失2个节点,您将无法发送消息,但即使这样,消息也不会丢失。