kafka高可靠性

  • kafka的高可靠性的核心是保证消息在传递过程中不丢失,涉及如下核心环节:

    1. 消息从生产者可靠的发送至Broker;---网络、本地丢数据。
    2. 发送Broker的消息可靠持久化;---PageCache缓存落盘、单点崩溃、主从同步跨网络。
    3. 消费者从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(默认30秒)的副本,故障时从ISR选举新Leader‌。
  • 分区的所有副本统称为AR,所有与leader副本保持一定同步的副本组成ISR,与leader同步滞后的多个副本组成OSR。
  • kafka通过多副本机制解决单机故障,也引入了数据一致性问题。

2.持久化优化‌

Kafka为了获得更高吞吐,Broker接收到消息后只是将数据写入PageCache后便认为消息已写入成功,而PageCache中的数据通过linux的flusher程序进行异步刷盘。

  • 消息顺序写入磁盘,零拷贝传输(sendfile)减少CPU开销。
  • 禁用非ISR选举:unclean.leader.election.enable=false防止数据不一致‌。

三、消费者端精准消费

  • 手动提交Offset‌:关闭自动提交(enable.auto.commit=false),业务处理完成后同步提交commitSync()‌。
  • 幂等处理‌:业务层通过唯一标识符(如消息ID)实现去重‌。

四、容灾与高可用

  • 跨集群同步‌:MirrorMaker 2.0实现异地容灾‌。
  • KRaft模式‌:Kafka3.0+移除ZooKeeper依赖,控制器秒级切换‌。

参考:

  1. 大白话八股-Kafka
相关推荐
明达智控技术7 小时前
告别停机内卷!热插拔远程IO,解锁工控运维新范式
分布式·物联网·自动化
漂着的圆木7 小时前
MCP 2026-07-28 长任务改造:别再用 HTTP 超时判断任务失败
分布式·架构·状态模式·ai agent
数智启示录13 小时前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
数智启示录13 小时前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
数智启示录14 小时前
Apache Kafka 不只是消息队列:日志与 Offset 分离如何让事件可重放 【Kafka合集】
经验分享·分布式·面试·kafka·apache
数智启示录14 小时前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache
BYSJMG14 小时前
大数据毕业设计选题推荐:基于大数据的全球气温历史演变分析与可视化,用Hadoop+Spark处理
大数据·hadoop·分布式·信息可视化·spark·kmeans·课程设计
爱吃苹果的梨叔14 小时前
AI 算力监控中心怎么建?分布式坐席 + 大屏联动 + 过程回放
人工智能·分布式·python
無a伟14 小时前
RabbitMQ :与AMQP的关系、核心组件、交换机类型
分布式·rabbitmq
老周聊架构15 小时前
Flink 连接器与生态:Kafka Offset 提交修复与 MySQL Binlog 延迟指标
mysql·flink·kafka