Kafka:消费者能否在所有副本同步之前读取消息?

Kafka: Can consumers read messages before all replicas are in sync?

我正在设计一个事件驱动的分布式系统。

我们需要分配的事件之一 1- 低延迟 2- 高可用性

对于此事件类型,消息的持久性和副本之间的一致性并不那么重要。

读取 Kafka documentation 似乎消费者需要等到分区的所有同步副本都已将消息应用到他们的日志,然后消费者才能从任何副本读取它.

我的理解对吗?如果是这样,有没有办法解决它

如果配置不当;消费者可以读取尚未写入副本的数据。

根据 book

Data is only available to consumers after it has been committed to Kafka—meaning it was written to all in-sync.

如果您配置了min.insync.replicas=1,那么只有Kafka不会等待副本赶上并为消费者提供数据。

Recommended configuration for min.insync.replicas depends on type of application. If you don't care about data then it can be 1, if it's critical piece of information then you should configure it to >1.

您应该考虑两件事:

  1. Producer不发消息给Kafka可以吗? (ack=0 的即发即弃策略)
  2. 消费者不看消息可以吗? (如果 min.insync.replica=1 那么如果代理出现故障,那么您可能会丢失一些数据)