kafka基础知识

kafka基础知识

Apache Kafka是一个分布式的发布 - 订阅消息传递系统,适合离线和在线消息消费。 Kafka建立在ZooKeeper同步服务之上,数据保存在磁盘上,并有副本防止丢失。 kafka可以与Apache Storm和Spark完美集成,用于实时流数据分析。具有高可靠性、高可扩展性、高吞吐量的优点。

kafka基本原理

在深入学习Kafka之前,需要先了解topics, brokers, producers和consumers等几个主要术语。 下面说明了主要术语的详细描述和组件。
在这里插入图片描述
在上图中,主题(topic)被配置为三个分区。 分区1(Partition 1)具有两个偏移因子01。分区2(Partition 2)具有四个偏移因子0,1,23,分区3(Partition 3)具有一个偏移因子0replica 的id与托管它的服务器的id相同。
假设,如果该主题的复制因子设置为3,则Kafka将为每个分区创建3个相同的副本,并将它们放入群集中以使其可用于其所有操作。 为了平衡集群中的负载,每个代理存储一个或多个这些分区。 多个生产者和消费者可以同时发布和检索消息。

Topics - 属于特定类别的消息流被称为主题(Topics),数据存储在主题中。主题分为多个分区。 对于每个主题,Kafka都保留一个分区的最小范围。 每个这样的分区都以不可变的有序顺序包含消息。 分区被实现为一组相同大小的段文件。
Partition - 主题可能有很多分区,所以它可以处理任意数量的数据。
Partition offset - 每个分区消息都有一个称为偏移量的唯一序列标识。
Replicas of partition - 副本只是分区的备份。 副本从不读取或写入数据。 它们用于防止数据丢失。
Brokers - 经纪人(Brokers)是简单的系统,负责维护公布的数据。 每个代理可能每个主题有零个或多个分区。 假设,如果一个主题和N个代理中有N个分区,则每个代理将有一个分区。假设某个主题中有N个分区并且N个代理(n + m)多于N个,则第一个N代理将拥有一个分区,下一个M代理将不会拥有该特定主题的任何分区。假设某个主题中有N个分区且N个代理(n-m)少于N个代理,则每个代理将拥有一个或多个分区共享。 由于经纪人之间的负载分配不均衡,不推荐这种情况。
Kafka Cluster - Kafka拥有多个经纪人称为Kafka集群。 Kafka集群可以在无需停机的情况下进行扩展。 这些集群用于管理消息数据的持久性和复制。
Producers - 生产者(Producer)是一个或多个Kafka主题的发布者。 生产者向Kafka经纪人发送数据。 每当生产者向经纪人发布消息时,经纪人只需将消息附加到最后一个段文件。 实际上,该消息将被附加到分区。 生产者也可以将消息发送到他们选择的分区。
Consumers - 消费者从经纪人那里读取数据。 消费者通过从经纪人处获取数据来订阅一个或多个主题并消费发布的消息。
Leader - Leader是负责所有分区读写的节点。 每个分区都有一台服务器充当领导者。
**Follower **- 遵循领导者(Leader)指示的节点称为追随者(Follower)。 如果领导失败,其中一个追随者将自动成为新领导。 追随者扮演正常的消费者角色,拉动消息并更新自己的数据存储。

https://www.yiibai.com/kafka/apache_kafka_fundamentals.html

Kafka群集体系结构

在这里插入图片描述
Broker - Kafka集群通常由多个代理组成,以保持负载平衡。 Kafka经纪人是无状态的,所以他们使用ZooKeeper维护他们的集群状态。 一个Kafka代理实例可以处理每秒数十万次的读写操作,每个Broker都可以处理TB消息,而不会影响性能。 Kafka经纪人的领导人选举可以由ZooKeeper完成。
ZooKeeper - ZooKeeper用于管理和协调Kafka经纪人。 ZooKeeper服务主要用于通知生产者和消费者关于Kafka系统中任何新经纪人的存在或Kafka系统中经纪人的失败。 根据Zookeeper收到的有关经纪人存在或失败的通知,生产者和消费者就会做出决定,并开始与其他经纪人协调他们的任务。
Producers - 生产者将数据推送给经纪人。 新代理启动后,所有生产者都会搜索它并自动向该新代理发送消息。 Kafka生产者不会等待经纪人的确认,并且可以像经纪人能够处理的那样快地发送消息。
Consumers - 由于Kafka代理是无状态的,这意味着消费者必须通过使用分区偏移量来维护消耗了多少消息。 如果消费者确认特定的消息偏移量,则意味着消费者已经消费了所有先前的消息。 消费者向代理发出一个异步拉取请求,以准备消耗字节缓冲区。 消费者可以简单地通过提供偏移值来倒回或跳到分区中的任何点。 消费者补偿值由ZooKeeper通知。

https://www.yiibai.com/kafka/apache_kafka_cluster_architecture.html

Kafka工作流

Kafka只是分成一个或多个分区的主题集合。 Kafka分区是消息的线性排序序列,每个消息由其索引标识(称为偏移量)。 Kafka集群中的所有数据都是不相关的分区联合。 传入消息写在分区的末尾,消费者依次读取消息。 通过将消息复制到不同的经纪人来提供持久性。
Kafka以快速,可靠,持久的容错和零停机方式提供基于发布订阅和队列的消息传递系统。 在这两种情况下,生产者只需将消息发送到一个主题,消费者就可以根据他们的需要选择任何一种消息传递系统。 可通过下一节中的步骤来了解消费者如何选择它们的消息系统。

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

以下是发布订阅消息工作流程的步骤

  • 生产者定期向主题发送消息。
  • Kafka经纪人将所有消息存储在为该特定主题配置的分区中。 它确保消息在分区之间平均分享。 如果制作者发送两条消息并且有两个分区,则Kafka将在第一个分区中存储一条消息,并在第二个分区中存储第二条消息。
  • 消费者订阅特定主题。
  • 当消费者订阅了一个主题,Kafka将向消费者提供该主题的当前偏移量,并且还将该偏移量保存在Zookeeper集合中。
  • 消费者会定期请求Kafka(如100小时)收取新消息。
  • Kafka收到生产者的消息后,会将这些消息转发给消费者。
  • 消费者将收到消息并进行处理。
  • 当消息被处理,消费者将向Kafka经纪人发送确认。
  • Kafka收到确认后,会将偏移量更改为新值并在Zookeeper中更新它。 由于在Zookeeper中维护了偏移量,因此即使在服务器繁忙期间,使用者也可以正确读取下一条消息。
    上述流程将重复,直到消费者停止请求。消费者可以随时选择倒带/跳至期望的主题偏移量并阅读所有后续消息。

队列消息/消费者组的工作流

在队列消息系统(不是单个消费者)中,具有相同组ID的一组消费者将订阅主题。 简而言之,订阅具有相同组ID的主题的消费者被视为单个组,并且消息在他们之间共享。 让我们来看看一下这个系统的实际工作流程。

  • 生产者定期向主题发送消息。
  • Kafka将所有消息存储在为特定主题配置的分区中,类似于之前的场景。
  • 单个消费者订阅特定主题,将Group ID设为Group-1。
  • Kafka发布订阅消息与消费者进行交互,直到新消费者订阅同一主题Topic-01,其Group ID与Group-1相同。
  • 一旦新消费者到达,Kafka将其操作切换到共享模式并在两个消费者之间共享数据。 这种共享将持续到用户数量达到为该特定主题配置的分区数量。
  • 当消费者数量超过分区数量,新消费者将不会收到任何进一步的消息,直到现有的任何消费者退订。 这种情况的出现是因为Kafka的每个消费者都将被分配至少一个分区,并且当所有分区被分配给现有消费者,新消费者将不得不等待。
  • 这个功能也被称为消费群。 以同样的方式,Kafka将以非常简单和有效的方式提供这两个系统。

ZooKeeper的角色

Apache Kafka的关键依赖是Apache Zookeeper,它是一个分布式配置和同步服务。 Zookeeper作为Kafka经纪人和消费者之间的协调接口。 Kafka服务器通过Zookeeper集群共享信息。 Kafka在Zookeeper中存储基本元数据,例如有关主题,经纪人,消费者偏移量(队列读取器)等的信息。
由于所有关键信息都存储在Zookeeper中,并且它通常在整个集群中复制这些数据,所以Kafka broker/Zookeeper的故障不会影响Kafka集群的状态。当Zookeeper重新启动,Kafka将恢复状态。 这给Kafka带来零停机时间。 Kafka经纪人之间的领导者选举也是通过在领导者失败的情况下,使用Zookeeper来完成的。

https://www.yiibai.com/kafka/apache_kafka_workflow.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值