kafka的可靠性和一致性

可靠性

kafka的可靠性主要依赖下面几个级别配置

  • broker 级别:关闭不完全的 Leader 选举,即 unclean.leader.election.enable=false
  • producer 级别:acks=all(或者 request.required.acks=-1),同时preducer模式为同步模式:producer.type=sync
  • topic 级别:设置 replication.factor>=3,并且 min.insync.replicas>=2

一致性

kafka的一致性主要依赖High Water Mark 机制

kafka的可靠性和一致性_第1张图片

假设分区的副本为3,其中副本0是 Leader,副本1和副本2是 follower,并且在 ISR 列表里面。虽然副本0已经写入了 Message3,但是 Consumer 只能读取到 Message1。因为所有的 ISR 都同步了 Message1,只有 High Water Mark 以上的消息才支持 Consumer 读取,而 High Water Mark 取决于 ISR 列表里面偏移量最小的分区,对应于上图的副本2,这个很类似于木桶原理。

引入了 High Water Mark 机制,会导致 Broker 间的消息复制因为某些原因变慢,那么消息到达消费者的时间也会随之变长(因为我们会先等待消息复制完毕)。延迟时间可以通过参数 replica.lag.time.max.ms 参数配置,它指定了副本在复制消息时可被允许的最大延迟时间。 

 

参考

https://www.cnblogs.com/yoke/p/11477167.html

你可能感兴趣的:(kafka)