一、核心概念
1.Message:
数据.传递的数据对象,主要由四部分构成:offset(偏移量)、key、value、timestamp(插入时间)。
2.Broker:
一般情况一台服务器一个broker,但是可以部署多个,反应到具体的进程就是Kafka进程
3.Topic:
是Kafka中一组消息的一个整体概念,Produce将消息写入到对应的Topic,Consumer从对应的Topic读取消息
4.Partition:
一个Topic包含多个分区,Produce发送到Topic的数据根据key的不同发送到不同的partition中(默认情况是hash分的)。其中: 一个分区中的数据有两个特性:
(1)有序:按照进入kafka的时间排序
(2)数据不可变:进入到kafka集群的数据不可进行变动
5.Producer:数据生产者
6.Consumer:数据消费者
7.ConsumerGroup:
多个Consumer共同进行数据消费,然后多个Consumer之间形成负载均衡的一个特性;每个consumer都属于一个特定的group组,一个group组可以包含多个consumer,但一个组中只会有一个consumer消费数据。其中:
(1)一个ConsumerGroup中如果Consumer的数量和消费的Topic的Partition的数量一样多,那么每个Consumer消费一个Partition的数据
(2)如果数据超过Partition的数量,那么有部分consumer处于不消费数据的状态
(3)如过partition大于消费者的数量,那么一个消费者就会消费多个partition
8.Zookeeper
职责:负责Kafka元数据管理以及Consumer相关数据管理
(1)Kafka元数据管理: 比如leader在哪里,broker块在哪里,每个分区数据插入了多少,插入到那个偏移量数据?
(2)Consumer相关数据管理: Consumer消费哪个topic,每个分区都消费了多少?
(3)负责针对每一个partition选举leader,比如kafka有10个topic,每个topic又有3个partition,那么就会有30个leader。(而leader负责备份节点的数据同步)
二、框架
三、关键概念
1.offset偏移量
(1)在每个Topic的每个Partition中,存储数据的时候,会给每一条数据存储一个当前消息在当前Partition中的偏移量(该值从0开始递增,类型为Long);这里的偏移量的含义是指当前消息在当前分区中是第几条消息;offset是由kafka的broker服务产生的,会随着数据存储到磁盘中,每个分区都会维护自己的offset偏移量序列,分区与分区之间的offset偏移量没有任何关系
(2)消费者在消费Topic对应分区的时候,每个消费者会在zk&kafka中保存该对应topic的消费数据量(eg: zk中看到的consumer offset偏移量的值表示的是该消费者在对应的分区上消费了多少条数据)
2.Consumer Group
(1)当多个Consumer的group.id参数值一致的情况下,这些consumer属于同一组,同一组的consumer共享一个consumer offset偏移量信息
(2)一个Consumer Group消费某一个topic数据的时候,该Topic的每个分区只能被Consumer Group中的一个consumer消费
(3)一个分区的数据可以被多个Consumer Group消费
(4)在Consumer Group中,
(a)如果Consumer的数量小于需要消费的分区数量,那么一个consumer可能会消费多个分区的数据;
(b)如果大于分区数量,那么可能存在consumer不消费数据的情况;
(c)如果相等,那么可能存在一个consumer消费一个分区的数据。
强调:一个Consumer Group中,一个Topic的分区的数据只能被一个Consumer消费;一个Consumer可以消费多个分区的数据
3.push和poll的区别:
push指的是主动将数据传递给对方,不管对方是否能够进行处理
poll指的是根据自身的一个数据处理能力,主动的到数据产生方获取数据
和flume的区别:flume都是push的方式,kafka有两种可选择的