目录
kafka 中涉及到的概念
Broker
Topic
Partition
Repication
Leader
Follower
Producer
Consumer
Consumer Group
offset 偏移量
Zookeeper
kafka对数据的把控策略
kafka扩谱结构
kafka 中涉及到的概念
L:Leader p:partition r:replication F:Follower zk:Zookeeper
上面字母的解释,在下回会根据图来讲到它们每个的作用,现在不理解没关系。
Broker
- Kafka 的集群中包含一个或多个服务器,服务器的节点称为broker(上图中体现了四个broker)
Topic
- 每条发送到Kafka集群的消息都有一个类别,这个类别称为Topic。
- 类似于数据库的表明和 ES 的 index
- 物理上不同的topic消息分开储存
- 逻辑上一个topic信息虽然保存在一个或者多个broker上(如上图可以看到一个Topic分出多个partition,分别保存在不同的broker上面),但是用户只需要指定消息的topic就可以获取到信息而不必关闭消息出自何处。
Partition
- 每条发送到Kafka集群的消息都有一个类别,这个类别称为Topic。
- 类似于数据库的表明和 ES 的 index
- 物理上不同的topic消息分开储存
- 逻辑上一个topic信息虽然保存在一个或者多个broker上(如上图可以看到一个Topic分出多个partition,分别保存在不同的broker上面),但是用户只需要指定消息的topic就可以获取到信息而不必关闭消息出自何处。
Partition
- topic 中的数据分割为一个或多个partition。
- 每个topic至少有一个partition,当生产者生产数据时,会根据分配策略选择分区,然后将消息追加到指定分区的末尾(队列)
Partition 数据路由规则
- 指定了partition,则直接使用
- 未指定partition则指定key通过,key和value进行hash选出来一个partition
- partition和key都未指定则,轮询出来一个partition
- 每条消息都会有一个自增的编号,主要用来标识顺序,用来标识消息的偏移量。(如上图所示,其中0,1,2,3 都表示数据的索引并不代表真实数据,观察三个patation的长短不一,可以判断不是轮询)
- 每个partition中数据使用多个segment文件存储。
- partition 中数据是有序的,不同partition之间丢失了顺序,如果topic中有多个patition,在严格保证消息的消费顺序下,需要将partition的数目设为1(顶图所示,生产者将1234567发送到两个partition,到消费者手里两个partition间的顺序无法保证,但是单个partition的数据却不会变)
- boker 储存topic的数据,如果某topic有N个partition,并且有个N个boker则每个boker都会有一个partition,如果有N+M个则会有M个空闲,如果有
Repication
- 数据存放到topic的partation中,但是有可能分区会损坏。
- 我们需要对分区的数据进行备份----kafka所有的备份都为从主节点进行出发。(备份多少取决于你对数据的重视程度)
- 我们将分区分为Leader(1) 和Follower(N)
- Leader 负责写入和读取数据
- Follower只负责备份
- 保证了数据的一致性
- 备份的数量为N,表示主+备=N,备份的位置为当前broker+1
Leader
- 每个partition 有多个副本,其中有且仅有一个作为leader,Leader是当前负责数据的读写的partition
Follower
- follower 跟随Leader,所有写请求都通过leader路由,数据变更会广播给所有的follower,follower与leader保持数据同步。
- 如果leader失效则从follower中选举出一个新的leader
- 当follower挂掉或者同步太慢,leader会把这个follower从列表中删除,重新在创建一个follower
Producer
- 生产者即数据的发布者,该角色将消息发布到Fafka的topic中
- broker接收到生产者发送的消息后,broker将消息追加到segment文件中
- 生产者发送的消息,存储到一个partition中,生产者也可以执行数据存储的partition(一般来说不会这么去做)
Consumer
- 消费者可以从broker中读取数据,消费者可以消费多个topic中的数据。
- Leader 负责写入和读取数据
- Follower只负责备份
- 保证了数据的一致性
- 每个partition 有多个副本,其中有且仅有一个作为leader,Leader是当前负责数据的读写的partition
Follower
- follower 跟随Leader,所有写请求都通过leader路由,数据变更会广播给所有的follower,follower与leader保持数据同步。
- 如果leader失效则从follower中选举出一个新的leader
- 当follower挂掉或者同步太慢,leader会把这个follower从列表中删除,重新在创建一个follower
Producer
- 生产者即数据的发布者,该角色将消息发布到Fafka的topic中
- broker接收到生产者发送的消息后,broker将消息追加到segment文件中
- 生产者发送的消息,存储到一个partition中,生产者也可以执行数据存储的partition(一般来说不会这么去做)
Consumer
- 消费者可以从broker中读取数据,消费者可以消费多个topic中的数据。
- 生产者即数据的发布者,该角色将消息发布到Fafka的topic中
- broker接收到生产者发送的消息后,broker将消息追加到segment文件中
- 生产者发送的消息,存储到一个partition中,生产者也可以执行数据存储的partition(一般来说不会这么去做)
Consumer
- 消费者可以从broker中读取数据,消费者可以消费多个topic中的数据。
上图:一个Consumer 启动两个线程去拉取 三个Partition 中的数据
Consumer Group
- 每个Consumer属于一个特定的Consumer Group(可以为Consumer 指定 group name,若不指定则属于默认的group)
- 将多个消费者集中到一起去处理某一个Topic的数据
- 可以更快的提高数据的消费能力
- 整个消费者组共享一组偏移量(防止数据被重复读取),也就是group中一个consumer 读取数据后,其它 consumer不会在读取到。
offset 偏移量
- 可以唯一标识一条消息
- 偏移量决定读取数据的位置,不会有线程安全问题,只有在数据写入时才会有数据安全的问题,消费者通过偏移量来决定下次读取的消息。
- 数据被消费后,并不会被马上删除,这样多个业务就可以重复使用kafa的消息
- 我们某一个业务也可以通过修改偏移量来达到数重新读取消息的目的,偏移量由用户控制
- 消息最终还是会被删除的,默认生命周期为一周,可以被设置。
Zookeeper
- kafka通过 zookeeper来储存集群的meta信息。(也就是除了生产数据信息,所有的信息都存在zookeeper中)
- 可以唯一标识一条消息
- 偏移量决定读取数据的位置,不会有线程安全问题,只有在数据写入时才会有数据安全的问题,消费者通过偏移量来决定下次读取的消息。
- 数据被消费后,并不会被马上删除,这样多个业务就可以重复使用kafa的消息
- 我们某一个业务也可以通过修改偏移量来达到数重新读取消息的目的,偏移量由用户控制
- 消息最终还是会被删除的,默认生命周期为一周,可以被设置。
Zookeeper
- kafka通过 zookeeper来储存集群的meta信息。(也就是除了生产数据信息,所有的信息都存在zookeeper中)
上图展示 zookeeper 中存储的一些信息
kafka对数据的把控策略
1.消费者消费完毕数据记录数据偏移量,还是消费者读到数据记录偏移量。取决于你想丢失数据还是重复读取数据,kafka的策略就是这些都取决于你的设置。
2.生产者传输到topic记录数据完成,还是topic记录完数据算数据完成。(如果数据传输到topic即算完成,可能会出现没有记录数据丢失数据情况,如果记录数据才算完成,如果节点宕机,则会涉及到补发问题)都取决于你要怎样设置。



