Kafka是一种高吞吐量的分布式发布-订阅消息系统。它允许你实时处理和分析流数据。
Kafka基于发布-订阅模式工作,消息生产者(发布)将消息发布到主题中,消费者(订阅)订阅主题并处理发布到主题中的消息。
Kafka的核心组件是:
1. 主题(Topic):主题是一个消息流的名称,生产者往里面发布消息,消费者从里面订阅消息。
2. 生产者(Producer):把消息发布到Kafka主题的客户端程序。
3. 消费者(Consumer):从Kafka主题订阅消息并处理的客户端程序。
4. 消息(Message):主题中存储和传输的数据单元。由键、值、时间戳和元数据组成。
5. 分区(Partition):主题物理上分布在多个broker(Kafka服务节点)上,每个分区是一个有序的消息序列。
6. 带leader的分区:每个分区都有一个broker充当leader,负责读写该分区数据。其余replica充当follower,随时准备领导角色。
7. broker:Kafka集群中的一台服务器,维护着主题的分区和消息,生产者和消费者通过与broker通信。
8. 副本(Replica):分区的副本,每个分区都有若干个副本,其中一个作为leader,其余为follower。
9. offset:每条消息在分区中的位置坐标,消费者通过此坐标消费消息。
Kafka的基本原理是:
1. 通过主题对消息进行分类:每个消息属于唯一的一个主题,生产者生产消息发布到主题,消费者订阅主题消费消息。
2. 通过分区实现扩展性:每个主题包含多个分区,每个分区是一个有序的消息队列。分区可以分布在不同的broker上,从而实现扩展。
3. 通过副本实现高可用:每个分区有若干个副本,其中一个为leader,其余为follower。leader负责消息读写, follower同步leader的数据。当leader失效时,其中一个follower会被选举为新的leader。
4. 消息offset用于定位:每个消息在分区中有一个唯一的offset,消费者通过offset消费消息。offset是消息在分区中的位置,从0开始连续增加。
5. broker作为消息代理:生产者和消费者通过与broker通信,broker维护消息并完成读写。客户端不直接读写消息,请求broker完成相关操作。
Kafka的运行机制是:
1. 生产者将消息发布到指定的主题和分区,broker接收消息并给其一个连续的offset,追加到对应分区中。
2. 消费者订阅主题和分区,并指定offset消费消息。它会拉取大于指定offset的消息,并返回给消费者。
3. 消费者处理消息后会更新offset,通知broker已消费到哪个offset。broker会根据各分区的offset维护消费进度。
4. 如果leader失效,其中一个follower会被选举为leader。生产者和消费者会自动discover新的leader并与之交互。
5. broker会定期 compact 分区中已删除的键消息,节省存储空间。compact不会改变消息的offset。
Kafka通过消息主题、分区、broker、offset等机制,实现了高吞吐、可扩展、高可用、消息持久化等功能,适用于大规模消息缓冲和流式数据处理。