事件流平台:KAFKA-动手教程
#database #datascience #eventdriven #kafka

Kafka

曾经想知道诸如Apache Kafka [开源],Google Pub/sub [Google Managed],Azure Event Hubs [Azure Managed]等系统如何函数?

这些分布式消息/事件流平台系统促进了ETL和分析功能的近实时数据流和并行处理。

实际应用包括构建能力:

  • 接近现实的时间数据管道 - 例如手机,运输订单,订单交货
  • 的地理定位更新
  • 批处理作业可能太昂贵的大规模数据管道 - 例如来自物联网设备或医疗设备的付款交易,传感器测量。

简单地说,这些是高性能和弹性的消息传输系统。这篇文章将帮助您了解麋鹿堆栈的组件,并可以使您启动并运行以处理本地计算机上的日志。 Kafka是一个状态系统,可以使以不同位置和不同速度读取流并重播过去的消息(至少从设置到期时间)。

卡夫卡的组件

Apache Kafka由几个关键组件组成,它们共同提供可扩展和分布式的流媒体平台。

Fig1: The Kafka Architecture

提到了Kafka的主要组件如下:

主题

主题保存了逻辑数据流。它是文件系统中的文件夹或数据库中的表的同义词。这些事件是文件夹中的文件的代名词或表中的行

中的行

您可以拥有许多主题。应用程序直接写或将消息发布到主题。在内部,主题是由多个分区组成的,数据包被分发,以跨多个节点(也称为经纪人)。

分区和偏移

如前所述,主题作为数据弹性的不同节点的多个分区存储。消息存储在分区中,获取增量ID(称为偏移)。

  • 偏移是增量的,一旦分配,即使消息被冲洗,也永远不会再重新分配偏移。

  • 偏移的分类顺序在分区内部保留,但在跨不同分区发送时不能保证。

  • 数据仅保留在有限的时间内(默认为1周)。此到期时间也可以修改为其他持续时间。

  • 数据是不变的,在将其写入分区后无法操纵一次。

  • 数据被随机分配给分区,除非分区被强制定义。

但是,如果分区是随机分配的?

经纪人

事件流平台是包含多节点簇的多节点分布式系统。集群的节点被称为经纪人。至少需要三个节点/经纪人才能制作一个完美运行的群集。数据在这些经纪人中随机分布和复制。

像任何其他分布式系统一样,连接到单个代理( Bootstrap Broker )将使访问整个集群。主题是在经纪人中普遍分配和分发的。但是,经纪人数量的数据分布是基于 复制因子 决定的。这将弹性带入了图片中,请确保:如果经纪人降低,另一个经纪人可以提供数据。

复制黄金法则: 即使多个经纪人可以拥有数据副本,但只有一个经纪人可以成为给定分区的领导者。其他经纪人将同步并复制数据。如果领导者失败,其中一名追随者将当选为领导者。

每个分区都有一个领导者和多个ISR(在Sync副本中)。诸如Apache Zookeeper之类的分销协调服务将决定这一点并照顾复制。

向Kafka发布数据(写)

要将数据写入Apache Kafka,您需要创建一个连接到Kafka群集并将消息发布到所需的Kafka主题的生产者应用程序。

生产者

被称为生产者的应用程序将数据写入主题。他们知道要写哪个经纪人和分区。在失败期间,生产者将自动恢复。负载在经纪人之间保持平衡。在发送数据时,如果未指定密钥,则生产者将基于Round Robin。

将数据发送给经纪人。

数据发送模式

可以配置生产商是否接收数据写入的确认。以下是可能的发送模式,可以为生产者配置其中之一。

没有滞后
发送模式 描述 数据丢失 用例
acks = 0 制作人不会等待确认 - 非常危险,但性能可能的数据丢失 适用于大容量数据传输
acks = 1 制作人将等待领导者经纪人确认 有限的数据丢失 适用于与数据流相关的(广泛使用)
acks = ack = asl 领导者和所有其他复制品获取数据并确认 没有数据丢失,但是性能差 适用于安全和持续的储藏>

消息键

如果消息的顺序很重要,则消息键是强制性的。例如,请考虑一个电子商务或交付应用程序,其中键可以作为order_ids。处理订单的处理类型有不同的事件类型,例如:“订购”,“运送”,“ 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.idlistenerslog.dirszookeeper.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架构以及如何入门的基本理解。它们允许在多个应用程序和系统上进行高通量,实时数据流和处理。一些实际用例包括:消息系统,大量日志聚合传输,流处理,数据管道和物联网数据处理。