kafka高可靠性
-
kafka的高可靠性的核心是保证消息在传递过程中不丢失,涉及如下核心环节:
- 消息从生产者可靠的发送至Broker;—网络、本地丢数据。
- 发送Broker的消息可靠持久化;—PageCache缓存落盘、单点崩溃、主从同步跨网络。
- 消费者从Broker消费到消息且最好只消费一次。—跨网络消息传输。
-
Kafka通过多级协同机制保障高可靠性,具体实现如下:
一、生产者端防丢失
ACKs分级确认:设置acks=all要求所有同步副本(ISR)持久化后才确认写入,结合min.insync.replicas=2确保最小副本数。
幂等与事务:启用enable.idempotence=true防止消息重复,事务机制(transactional.id)保证跨分区原子写入。
Producer发送消息后,能够收到来自Broker的消息保存成功ack:
- Request.required.acks=0:请求发送即认为发送成功,不关心有没有写成功,常用于日志进行分析场景。
- Request.required.acks=1:当leader partition写入成功以后,才算写入成功,有丢数据的可能。
- Request.required.acks=-1:ISR列表里面的所有副本都写完以后,这条消息才算写入成功,强可靠性保证。
二、Broker层冗余设计
1.副本同步机制(为了解决单机故障可能带来的数据丢失问题,kafka为分区引入了副本机制):
- 分区配置多副本(通常3副本),Leader处理读写,Follower同步数据。
- ISR动态管理:仅同步延迟≤replica.lag.time.max.ms(默
