消息队列之KAFKA
目录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 Quorum11.ZooKeeper/KRaft12.命令行工具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 RecordAccumulator1.3send()方法2. Sender线程(Background Thread)2.1 职责2.2runOnce()方法3. 为何采用这种线程模型?4. 为何KafkaProducer是线程安全的?Kafka为什么能支撑高吞吐?介绍一下poll()1.poll()的核心功能2.poll()的工作流程3. 为什么自动提交依赖poll()?4.poll()的风险5. 关键配置参数与poll()的关系6. 最佳实践建议Spring Kafka如何管理Poll和CommitKafka支持哪些消息压缩算法?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-Once5. 注意事项与限制SpringBoot集成kafka依赖包配置文件配置类消费者案例一个生产者案例一个,创建删除topic命令查看消费者组重置偏移量跳过积压消息Kafka的架构核心组件1.Producer(生产者)负责将消息发送到Kafka的Topic中。生产者的“消息分区策略/消息路由机制”决定了每条消息被写入Topic的哪个Partition(这里指Leader Partition),由Partitioner接口实现,常见的有Key哈希、轮询等策略,也可自定义分区策略:Key哈希分区(默认策略)如果消息指定了key,Kafka