1、概念简介
Kafka是一个高吞吐量分布式消息系统,采用Scala和Java语言编写,它提供了快速、可扩展的、分布式、分区的和可复制的日志订阅服务。它由Producer、Broker、Consumer三部分构成。
2、核心设计
2.1、组件模块
1)Producer
消息生产者,是消息的产生的源头,负责生成消息并发送到Kafka服务器上。
2)Consumer
消息消费者,是消息的使用方,负责消费Kafka服务器上的消息。
对于消费者,不是以单独的形式存在的,每一个消费者属于一个 consumer group,一个 group 包含多个 consumer。特别需要注意的是:订阅 Topic 是以一个消费组来订阅的,发送到 Topic 的消息只会被订阅此 Topic 的每个 group 中的一个 consumer 消费。
具体说来是根据 partition 来分的,一个 Partition只能被消费组里的一个消费者消费,但是可以同时被多个消费组消费,消费组里的每个消费者是关联到一个 partition 的。因此对于一个 topic同一个 group 中不能有多于 partitions 个数的 consumer 同时消费,否则将意味着某些 consumer 将无法得到消息。
3)Broker
消息中间件处理结点,一个Kafka节点(server)就是一个broker,多个broker可以组成一个Kafka集群。
Broker不保存订阅者的状态,由订阅者自己保存。Broker没有副本机制,一旦broker宕机,该broker的消息将都不可用。
4.1)Topic
在Kafka中,消息是按Topic组织的。
4.2)Offset
partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。
消息存储在Kafka的Broker上,消费者拉取消息数据的过程中需要知道消息在文件中的偏移量,这个偏移量就是所谓的Offset。
5.1)Partition
topic物理上的分组,一个topic可以分为多个partition,每个partition为一个目录;多个分区可以分布到多个Broker上,也可以分布到同一台Broker上;
即一个消费者可以消费多个分区,一个分区只能给一个消费者消费;
Controller:中央控制器Control,负责管理分区和副本状态并执行管理着这些分区的重新分配。(里面涉及到partition leader 选举)
ISR:同步副本组
5.2)Segment
partition物理上由多个segment组成;
每个Partition(目录)由多个大小相等segment(段)数据文件组成,但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
==================== 其他特性=====================================================================
1)kafka服务器的编号为0起始,number-1结束;
2)消息订阅者可以rewind back到任意位置重新进行消费,当订阅者故障时,可以选择最小的offset(id)进行重新读取消费消息。
3、代码引用
4、管理工具
可视化工具kafka-eagle
下载kafka-eagle的安装包,下载地址:https://github.com/smartloli/kafka-eagle-bin/releases
============================================ over ===========================================