kafka学习笔记-04-工作流程

翻译地址:https://www.tutorialspoint.com/apache_kafka/apache_kafka_workflow.htm

1.工作流程

至此,我们讨论了kafka的核心概念,接下来让我们抛出几个kafka工作流程的亮点。kafka是一个将topic分割为1或多partition的集合,每个partition是一个线性的数据序列,每个partition被他们的索引标识,我们称之为offset。所有的partition在kakfka集群中是脱节混合存放,即将到来的数据被写在最后一块partitiotn的末尾,由消费者依序读取,将数据复制到不同broker来持久保存。
kafka以速度快,高可用,持久,容错,零延迟等特性提供了消息队列和发布-订阅的消息传递机制。在两种情况下,生产者发送数据给topic,消费者可以自己选择需要的类型。接下来让我们去理解消费者如何决定使用哪种类型消费数据。

1.1 发布-订阅传递消息的工作流程

  1. 生产者以定期的间隔发送消息给topic
  2. kafka将所有的信息存储在那些为特定topic配置的分区中,确保所有的信息均匀被分散在各个分区中,如果生产者发送两条信息到两个分区,一条信息会在存储在第一个分区,另一条消息会被存储在另一个分区中
  3. 消费者订阅topic
  4. 一旦消费者订阅话题,kafka就会发送当前的offset给消费者同时将offset保存在zookeeper空间
  5. 消费者会在一个特定相等的时间间隔请求新数据,如0.1s
  6. 一旦kafka接受到了生产者的消息就会转发给消费者
  7. 消费者处理结束这些消息之后会发送已接受信息给kafka broker
  8. kafka接受到了来自消费者的acknowledge,就会修改offset并更新zookeeper中存储的变量,因为这些重要变量被维护在zookeeper中,消费者依旧可以获取offset在服务器故障时
  9. 以上的步骤将会重复直到消费者停止请求
  10. 消费者可以选择在任何时候回退或者跳跃至需要抵达的位置在任何时间然后获取offset后的所有数据。

1.2 消息队列和消费者组的工作流程

在消息传递系统中不是一个消费者,而是含有相同group-id的一组消费者订阅一个topic。简单地说就是消费者订阅话题,只要有相同的group-id他们就是一组,消息可以在他们之中被共享。

  1. 生产者定期发送消息給topic
  2. 与之前场景类似,kafka将所有的数据都存储在为topic配置的partition中。
  3. 假设 一个消费者订阅了topic-01,以及group-id=group-01
  4. kafka与消费者以同样的方式交互直到一个新的消费者订阅了同一个话题topic-01 ,以及组id=group-01
  5. 一旦新的消费者抵达,kafka会切换发布-订阅模式到共享模式,共享数据在两个消费者之间,这种贡献会继续直到组id相同的消费者数量达到了为topic分配的分区数。
  6. 消费者数量超过了分区数目,新的消费者抵达将不会接收到任何数据直到已经存在其中的消费者退出。这种场景出现是因为kafka会给每个消费者至少分配一个分区,当分区数量小于消费者时,新的消费者就必须等待。
  7. 这种机制也叫作消费者组,同样的方式,kafka将这两种机制以最简单和最有效的方式提供最优性能

1.3 zookeeper的角色

kafka最重要的依赖就是分布式配置异步工作的zokeeper,其提供服务主要在broker与消费者之间进行协同。kafka集群共享数据主要依赖zookeeper,kafka会存储一些元数据在zookeeper之中,topic,broker,comsumer offset(queue readaers)等
因为保存在zookeeper之中的数据至关重要,所以通常整个集群都会作为备份,broekr/zookeeper的失败并不影响整个broker集群的状态,kafka将恢复状态,一旦zookeeper重启,kafka来说就是零延迟,如果leader执行者失败,broker之间选举leader也可以由zookeeper进行。

下一篇学习笔记,我们将探讨如何下载安装java,zookeeper,以及kafka在您的机器上。

你可能感兴趣的:(kafka学习笔记-04-工作流程)