曾经想知道诸如Apache Kafka [开源],Google Pub/sub [Google Managed],Azure Event Hubs [Azure Managed]等系统如何函数?
这些分布式消息/事件流平台系统促进了ETL和分析功能的近实时数据流和并行处理。
实际应用包括构建能力:
- 接近现实的时间数据管道 - 例如手机,运输订单,订单交货 的地理定位更新
- 批处理作业可能太昂贵的大规模数据管道 - 例如来自物联网设备或医疗设备的付款交易,传感器测量。
简单地说,这些是高性能和弹性的消息传输系统。这篇文章将帮助您了解麋鹿堆栈的组件,并可以使您启动并运行以处理本地计算机上的日志。 Kafka是一个状态系统,可以使以不同位置和不同速度读取流并重播过去的消息(至少从设置到期时间)。
。卡夫卡的组件
Apache Kafka由几个关键组件组成,它们共同提供可扩展和分布式的流媒体平台。
提到了Kafka的主要组件如下:
主题
主题保存了逻辑数据流。它是文件系统中的文件夹或数据库中的表的同义词。这些事件是文件夹中的文件的代名词或表中的行
中的行您可以拥有许多主题。应用程序直接写或将消息发布到主题。在内部,主题是由多个分区组成的,数据包被分发,以跨多个节点(也称为经纪人)。
。分区和偏移
如前所述,主题作为数据弹性的不同节点的多个分区存储。消息存储在分区中,获取增量ID(称为偏移)。
-
偏移是增量的,一旦分配,即使消息被冲洗,也永远不会再重新分配偏移。
-
偏移的分类顺序在分区内部保留,但在跨不同分区发送时不能保证。
-
数据仅保留在有限的时间内(默认为1周)。此到期时间也可以修改为其他持续时间。
-
数据是不变的,在将其写入分区后无法操纵一次。
-
数据被随机分配给分区,除非分区被强制定义。
但是,如果分区是随机分配的?
经纪人
事件流平台是包含多节点簇的多节点分布式系统。集群的节点被称为经纪人。至少需要三个节点/经纪人才能制作一个完美运行的群集。数据在这些经纪人中随机分布和复制。
像任何其他分布式系统一样,连接到单个代理( Bootstrap Broker )将使访问整个集群。主题是在经纪人中普遍分配和分发的。但是,经纪人数量的数据分布是基于 复制因子 决定的。这将弹性带入了图片中,请确保:如果经纪人降低,另一个经纪人可以提供数据。
复制黄金法则: 即使多个经纪人可以拥有数据副本,但只有一个经纪人可以成为给定分区的领导者。其他经纪人将同步并复制数据。如果领导者失败,其中一名追随者将当选为领导者。
每个分区都有一个领导者和多个ISR(在Sync副本中)。诸如Apache Zookeeper之类的分销协调服务将决定这一点并照顾复制。
向Kafka发布数据(写)
要将数据写入Apache Kafka,您需要创建一个连接到Kafka群集并将消息发布到所需的Kafka主题的生产者应用程序。
生产者
被称为生产者的应用程序将数据写入主题。他们知道要写哪个经纪人和分区。在失败期间,生产者将自动恢复。负载在经纪人之间保持平衡。在发送数据时,如果未指定密钥,则生产者将基于Round Robin。
将数据发送给经纪人。数据发送模式
可以配置生产商是否接收数据写入的确认。以下是可能的发送模式,可以为生产者配置其中之一。
发送模式 | 描述 | 数据丢失 | 用例 |
---|---|---|---|
acks = 0 | 制作人不会等待确认 - 非常危险,但性能 | 没有滞后可能的数据丢失 | 适用于大容量数据传输 |
acks = 1 | 制作人将等待领导者经纪人确认 | 有限的数据丢失 | 适用于与数据流相关的(广泛使用) |
acks = ack = asl | 领导者和所有其他复制品获取数据并确认 | 没有数据丢失,但是性能差 | 适用于安全和持续的储藏> |
消息键
如果消息的顺序很重要,则消息键是强制性的。例如,请考虑一个电子商务或交付应用程序,其中键可以作为order_id
s。处理订单的处理类型有不同的事件类型,例如:“订购”,“运送”,“ transit”和“ evarded”,这对于以相同的顺序进行处理至关重要,这是通过分配给它们来完成的到同一消息键。
消息键可以是哈希,数字,字符串,号码等。如果消息键为null,则发送round Robin(即,如果有两个经纪人 - 第一条消息发送到Broker 1,第二个消息,第二个消息到Broker 2 ,给经纪人1等的第三条消息)。
如果键是零或未提供的,则数据将基于Round Robin发送到任何分区。
在Kafka中订阅数据(读取)
被称为消费者的应用程序读取来自消费者群体的数据,也称为订阅。
消费者
消费者从主题中读取数据。他们知道要阅读哪个经纪人。如果发生故障,消费者可以自动回归。每个分区中都按顺序读取数据。
如果消费者从多个分区阅读,则阅读顺序可以是随机的,但是在每个分区中,数据都是按顺序读取的。
消费者群体
消费者通过阅读消费者群体从多个分区中阅读。工作分为消费者群体。在内部,消费者将使用小组协调员和消费者协调员将消费者分配给分区。
如果消费者太多,只有几个分区,则某些消费者可能不活动。当一名消费者下降时,这些不活跃的消费者可能会有所帮助,因此不活动的消费者可以替代失败的消费者。
例如:
仪表板应用程序可以在消费者组1下有两个消费者,并且可以一次从三个分区中阅读。
通知应用程序可以同时从多个分区中读取一个消费者。
安装卡夫卡
设置Apache Kafka涉及:
- Downloading Kafka
- 配置Kafka群集
- 启动必要的组件。
这是设置Kafka的步骤的高级概述:
下载kafka:
访问Apache Kafka网站(https://kafka.apache.org/downloads)并下载所需的Kafka版本。
将下载的存档文件提取到系统上的目录。
配置kafka:
导航到KAFKA安装目录并找到配置子目录。
根据您的要求修改配置文件:
-
config/server.properties
:此文件包含Kafka经纪人的配置。您可能需要更新诸如broker.id
,listeners
,log.dirs
和zookeeper.connect
的属性。 -
config/zookeeper.properties
:此文件包含Kafka使用的Zookeeper服务器的配置。如有必要
启动必要的组件
- 开始Zookeeper :
kafka依靠Zookeeper来协调和维持群集状态。通过在新的终端或命令提示符窗口中执行以下命令来启动Zookeeper:
$ bin/zookeeper-server-start.sh config/zookeeper.properties
在设置和使用kafka时,请保持Zookeeper实例。
- 开始Kafka Brokers :
在单独的终端或命令提示室窗口中,通过执行以下命令来启动Kafka经纪人:
$ bin/kafka-server-start.sh config/server.properties
如果要设置一个Kafka群集,则可以启动多个经纪人。在这种情况下,您需要为每个经纪人配置诸如Broker.ID,Log.dirs之类的唯一属性。
- 创建主题 :
kafka使用主题来组织和分类消息。您可以使用以下命令来创建一个主题:
$ bin/kafka-topics.sh --create --topic <topic_name> --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
根据需要调整<topic_name>
,并指定适当的引导程序服务器(KAFKA经纪)地址,分区和复制因子。
- 验证设置 :
为了确保Kafka正在运行并且设置正确,您可以使用各种KAFKA命令行工具来生产和消费来自主题的消息。例如:
产生消息:
$ bin/kafka-console-producer.sh --topic <topic_name> --bootstrap-server localhost:9092
消费消息:
$ bin/kafka-console-consumer.sh --topic <topic_name> --bootstrap-server localhost:9092 --from-beginning
这些步骤为本地开发和测试目的提供了KAFKA的基本设置。对于生产环境,需要其他配置和考虑因素,例如确保群集,配置复制和设置其他组件,例如Kafka Connect或Kafka流。
这为您提供了对Kafka架构以及如何入门的基本理解。它们允许在多个应用程序和系统上进行高通量,实时数据流和处理。一些实际用例包括:消息系统,大量日志聚合传输,流处理,数据管道和物联网数据处理。