Kafka如何保证数据一致性和可靠性?

kafka保证数据一致性和可靠性

数据一致性保证

​ 一致性定义:若某条消息对client可见,那么即使Leader挂了,在新Leader上数据依然可以被读到

​ HW-HighWaterMark: client可以从Leader读到的最大msg offset,即对外可见的最大offset, HW=max(replica.offset)

​ 对于Leader新收到的msg,client不能立刻消费,Leader会等待该消息被所有ISR中的replica同步后,更新HW,此时该消息才能被client消费,这样就保证了如果Leader fail,该消息仍然可以从新选举的Leader中获取。

​ 对于来自内部Broker的读取请求,没有HW的限制。同时,Follower也会维护一份自己的HW,Folloer.HW = min(Leader.HW, Follower.offset)

数据可靠性保证

​ 当Producer向Leader发送数据时,可以通过acks参数设置数据可靠性的级别

  • 0: 不论写入是否成功,server不需要给Producer发送Response,如果发生异常,server会终止连接,触发Producer更新meta数据;
  • 1: Leader写入成功后即发送Response,此种情况如果Leader fail,会丢失数据

  • -1/all: 等待所有ISR接收到消息后再给Producer发送Response,这是最强保证