您的位置:首页 > 大数据

大数据学习笔记-------------------(14)

2017-04-22 00:00 162 查看

第14章 KAFKA工作流程

KAFKA是一个被简单地分割成一个或多个分区的Topic集合。一个KAFKA分区是一个线性有序消息序列,在该序列中的每个消息被它们的索引(偏移量offset)标识。在KAFKA集群中的所有数据是不想交的分区并集。收到的信息被写入分区的末尾,由消费者依次读取消息。由不同的中间件不间断的复制信息。

KAFKA提供PUB-SUB和基于队列的邮件系统,该邮件系统是快速、可靠、持续、容错和零downtime。在这两种情况下,生产者发送消息到一个topic,消费者根据自身需要选择消息系统的任何一种类型。

14.1 PUB-SUB信息工作流

以下是PUB-SUB消息的逐步工作流程:

1) 生产者定期发送消息到一个topic

2) KAFKA中间件存储特定topic中被配置分区的所有信息。这种方法是为了确保信息在分区间平等共享。如果生产者发送两个信息于此同时有两个分区,KAFKA将存储第一条信息在第一分区,存储第二信息在第二分区。

3) 消费者订阅一个特定的topic

4) 一旦消费者订阅一个topic,KAFKA将提供topic的当前偏移量(offset)给消费者于此同时保存偏移量(offset)到zookeeper ensemble中。

5) 消费者为新信息将定期发送请求到KAFKA

6) 一旦KAFKA收到来自生产者的信息,它将把这些信息转发给消费者

7) 消费者收到信息并处理该信息

8) 一旦信息被处理,消费者将发送一个确认信息给KAFKA中间件。

9) 一旦KAFKA收到一个确认信息,它将给偏移量赋予新的值同时在zookeeper 中更新该偏移量。由于偏移量由zookeeper维持,消费者甚至可以在服务中断的情况下正确读取下一条信息

10) 重复以上步骤直至消费者停止请求

11) 消费者有权退(rewind)/跳过(skip) 一个topic中所需的偏移量在任何时间,并读取所有后续消息。


14.2 队列信息工作流/消费者组

在一个队列消息系统中不仅仅只有一个消费者,而是有一组具有相同“Group ID”的消费者来订阅一个topic。简而言之,订阅一个带有相同"Group ID"的topic的消费者被当做单一的组,于此同时信息在改组内共享。系统的实际工作流程:

1) 生产者定期发送消息到一个topic

2) KAFKA存储所有信息到类似于早期场景的特定topic配置的分区中

3) 单个消费者定于一个特定的topic,假设带有“Group ID”的“Topic-01”作为“Group-1”

4) KAFKA用于Pub-Sub信息系统相同的方式与消费者进行互动,直至新的消费者订阅相同的Topic,带有“Group ID”的“Topic-01”作为“Group-1”

5) 一旦新的消费者进入到组中,KAFKA切换到共享模式,并共享两个消费者之间的数据。这种共享将一直持续到消费者的数量达到特定topic配置的分区数量。

6) 一旦消费者的数目超过分区数,新的消费之后将不接收任消息,直到现有消费者中有消费者取消订阅。这种情况的出现的原因是KAFKA的每个消费者将被分配至少一个分区,一旦所有的分区被分配给现有的消费者,则新的消费者将不得不等待

7) 这个特征也被称作"消费者组(Consumer Group)"。以同样的方式,KAFKA以简单、高效的方式给两个系统提供最好。


14.3 Zookeeper在KAFKA中扮演的角色

Apachekafka一个关键依赖是Apache zookeeper zookeeper是一个分布式配置和同步服务。zookeeper为kafka中间件和消费者之间的协调接口。通过zookeeper集群实现kafka服务器共享信息。kafka储zookeepe的基本元数据,如topic,中间商,消费者偏移(offset)(队列阅读器)等信息。
由于所有的关键信息储存在zookeeper和通过zookeeper ensemble复制此数据,kafka中间件的失败/zookeeper的失败不影响kafka集群的状态。一旦zookeeper重新启动,kafka将会恢复状态。这使得具有KAFKA零downtime。kafka中间件之间的领导人选举通过在领导故障的情况下使用zookeeper完成的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐