👩🏽💻个人主页:阿木木AEcru
🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》
💹每一次技术突破,都是对自我能力的挑战和超越。
目录
- 一、前言
- Kafka的优点
- Kafka的使用场景
- 二、高频面试题
- 1. Kafka的设计理念
- 2. 数据传输的事务级别
- 3. Kafka节点存活判断
- 4. Producers的消息发送
- 5. Consumer的分区消息消费
- 6. Kafka的消息传输模式
- 7. Kafka的硬盘消息格式
- 8. Kafka的高效文件存储设计
- 9. Kafka与传统消息系统的区别
- 10. Kafka的分区放置策略
- 11. Kafka分区的存储位置
- 12. Kafka的消息存储结构
- 13. Kafka的ACK机制
- 14. Kafka的消费者数据消费
- 15. 消费者负载均衡
- 16. 数据有序性
- 17. Kafka的生产数据分组策略
一、前言
Kafka是一个分布式流处理平台,由Apache软件基金会开发。它主要用于构建实时数据管道和流式应用程序。Kafka具有高吞吐量、可扩展性和容错性,非常适合用于实时分析系统。
Kafka的优点
- 高吞吐量:Kafka能够处理高吞吐量的数据,每秒可以处理数百万条消息。
- 可扩展性:Kafka集群可以通过简单地增加更多的Broker来水平扩展。
- 持久性:Kafka提供了数据持久化机制,确保消息不会因为系统故障而丢失。
- 容错性:通过副本和分区机制,Kafka能够在节点故障的情况下继续运行。
- 分布式:Kafka天然支持分布式,可以在多个数据中心之间同步数据。
- 实时性:Kafka能够实现实时的数据传输和处理。
- 灵活的消息传递:支持发布-订阅和点对点的消息传递模型。
- 高可用性:通过ZooKeeper进行集群管理,确保服务的高可用性。
- 数据压缩:支持消息压缩,减少存储和传输的开销。
- 客户端支持:拥有丰富的客户端库,支持多种编程语言。
Kafka的使用场景
- 日志聚合:作为日志收集系统,收集不同服务的日志数据。
- 实时分析:用于实时数据处理和分析,如用户行为分析。
- 事件源:在微服务架构中,作为事件总线,传递服务间的消息。
- 流式处理:实现复杂的流式数据处理逻辑。
- 消息队列:作为消息队列,解耦生产者和消费者。
- 用户活动跟踪:跟踪用户在应用程序中的行为。
- 指标监控:收集和监控系统指标,用于性能优化。
- 数据管道:在不同数据库、服务或数据中心之间可靠地传输数据。
- 缓存系统:作为缓存系统,存储热点数据。
- 任务队列:管理后台任务和异步处理流程。
二、高频面试题
1. Kafka的设计理念
Kafka是一个分布式流处理平台,它通过Topic组织消息,并支持Producers发布消息和Consumers订阅消息。Kafka以集群模式运行,由多个Broker组成,每个Broker是一个独立的服务节点。Producers通过网络将消息发布到集群,而Consumers从Broker拉取消息进行处理。
2. 数据传输的事务级别
Kafka支持三种消息传输事务级别:
- 最多一次(At most once):消息最多被传输一次,但不能保证消息不丢失。
- 最少一次(At least once):消息至少被传输一次,但不能保证消息不重复。
- 精确的一次(Exactly once):确保每个消息只被传输一次,既不丢失也不重复,这是理想状态。
3. Kafka节点存活判断
Kafka节点的存活性基于两个条件:
- 节点必须保持与ZooKeeper的连接,ZooKeeper通过心跳检测来监控节点状态。
- 对于Follower节点,必须能够及时同步Leader的写操作,以保持数据一致性。
4. Producers的消息发送
Producers直接将消息发送到目标Topic的Leader节点,无需在多个节点间分发。Kafka集群中的所有节点都能提供关于活动节点和目标分区Leader位置的信息,帮助Producer直接定位。
5. Consumer的分区消息消费
Consumer可以通过指定日志偏移量(offset)来消费特定分区的消息。Consumer拥有offset的控制权,可以选择重新消费之前的消息,这为消息处理提供了灵活性。
6. Kafka的消息传输模式
Kafka采用Pull模式,即Consumer主动从Broker拉取消息。这种模式允许Consumer根据自身的消费能力来决定拉取消息的策略,避免了Push模式下可能由于消息推送速率过快导致Consumer处理不过来的问题。
7. Kafka的硬盘消息格式
Kafka的消息由固定长度的头部和可变长度的字节数组组成,头部包含版本号和CRC32校验码,用于确保数据的完整性和正确性。
8. Kafka的高效文件存储设计
Kafka通过将大文件分割为多个小文件段来提高存储效率,利用索引信息快速定位消息,并尽可能将索引元数据映射到内存中,减少磁盘I/O操作。
9. Kafka与传统消息系统的区别
Kafka的三个关键特性是:
- 持久化日志,支持重复读取和长期保留。
- 分布式系统,集群运行,数据复制提高容错性和可用性。
- 支持实时流式处理。
10. Kafka的分区放置策略
Kafka在创建Topic时,会根据Broker的数量和配置的副本因子来决定分区的放置。第一个分区的副本会随机放置,后续分区的副本会按照一定的规则在Broker间轮询。
11. Kafka分区的存储位置
Kafka的分区存储位置由log.dirs参数指定,可以配置多个目录以提高读写性能。Kafka会优先在分区目录数量最少的目录下创建新的分区。
12. Kafka的消息存储结构
每个分区的多个副本以文件夹的形式存储在Broker上,每个分区都有一个唯一的序号。分区文件夹下包含多个segment文件,这些文件按大小分割,并且有序存储消息。
13. Kafka的ACK机制
Kafka提供了三种ACK级别:
- acks=0:生产者不等待任何Broker的确认,延迟最低,但可靠性最差。
- acks=1:等待Leader副本确认,但如果Leader挂掉,可能会丢失数据。
- acks=all:等待所有副本确认,确保消息不会丢失。
14. Kafka的消费者数据消费
Consumer在消费数据时会记录offset,以便下次从上次停止的位置继续消费。
15. 消费者负载均衡
Kafka通过消费者组和分区分配策略来实现负载均衡,确保每个消费者成员都能均匀地消费消息。
16. 数据有序性
在同一个消费者组内部,消息消费是有序的,但不同消费者组之间的消息消费是无序的。
17. Kafka的生产数据分组策略
生产者根据消息的key来决定将数据发送到哪个分区,这样可以保证具有相同key的消息总是被发送到同一个分区。
感谢观看至此,希望该文章能够帮助到您提升知识和技能。如果您喜欢我的内容,请不要忘记点赞和分享哦!👍