目录
Kafka的架构
核心组件
1.Producer(生产者)
2.Broker(服务节点)
3.Topic(主题)
4.Partition(分区)
5.Replica(副本)
6.ISR(In-Sync Replicas)
7.Replica Manager(副本管理器)
8.Consumer(消费者)
9.Group Coordinator(组协调器)
10.Controller和Controller Quorum
11.ZooKeeper/KRaft
12.命令行工具
Leader选举是如何进行的?
Controller Leader 选举(集群级)
Partition Leader 选举(分区级)
__cluster_metadata单分区主题(即Metadata Log)
概述
元数据是如何流动的?
元数据的数据一致性如何保障?
kafka的分区容错性如何?Kafka的KRaft架构在网络分区发生后是否可以独立运作?
Kafka为什么能支撑高可用?Kafka的容错性如何?
Kafka是单线程的吗?
1. Kafka消费者是单线程模型吗?
1.1 单线程非阻塞IO模型
1.2 消费者如何实现负载均衡?
2. Kafka生产者是单线程模型吗?
1. 主线程(Main Thread)
1.1 职责
1.2 RecordAccumulator
1.3 send()方法
2. Sender线程(Background Thread)
2.1 职责
2.2 runOnce()方法
3. 为何采用这种线程模型?
4. 为何KafkaProducer是线程安全的?
Kafka为什么能支撑高吞吐?
介绍一下poll()
1. poll()的核心功能
2. poll() 的工作流程
3. 为什么自动提交依赖poll()?
4.poll()的风险
5. 关键配置参数与 poll() 的关系
6. 最佳实践建议
Spring Kafka如何管理Poll和Commit
Kafka支持哪些消息压缩算法?
ISR机制如何保证数据不丢失?
如何保证消息顺序性?
自动提交和手动提交
如何防止消息重复消费?
消息积压如何处理?
Kafka与传统MQ的区别?
概述
Kafka:消费者主动拉取(Pull 模式)
RabbitMQ:Broker主动推送(Push 模式)
对比总结
如何设计合理的Partition数量?
Exactly-Once(恰好1次)语义如何实现?
Kafka如何使用事务?
1. 核心概念与前提条件
2. 原生 Java API 使用流程
第一步:配置生产者
第二步:初始化事务
第三步:开始事务
第四步:发送消息与提交/中止
第五步:配置消费者以读取事务消息
3. Spring Kafka 中的简化使用
方式一:使用 KafkaTemplate.executeInTransaction
方式二:使用 @Transactional 注解
4. “消费-处理-生产”场景下的 Exactly-Once
5. 注意事项与限制
SpringBoot集成kafka
依赖包
配置文件
配置类
消费者案例一个
生产者案例一个,创建删除topic
命令
查看消费者组
重置偏移量跳过积压消息
Kafka的架构
核心组件
1.Producer(生产者)
负责将消息发送到Kafka的Topic中。
生产者的“消息分区策略/消息路由机制”决定了每条消息被写入Topic的哪个Partition(这里指Leader Partition),由 Partitioner 接口实现,常见的有Key哈希、轮询等策略,也可自定义分区策略:
- Key哈希分区(默认策略)
如果消息指定了key,Kafka