什么是阿帕奇·卡夫卡?

阿帕奇卡夫卡是一个分布式流媒体系统,允许您发布和订阅记录流。在另一个方面,它是一个企业消息系统。它是一个高度快速、水平可扩展和容错的系统。卡夫卡有四个核心 Abi:

生产者 API

此 API 允许客户端连接到以集群运行的 Kafka 服务器,并将记录流发布到一个或多个 Kafka 主题。

消费者 API

此 API 允许客户端连接到以集群运行的 Kafka 服务器,并消耗来自一个或多个 Kafka 主题的记录流。卡夫卡消耗卡夫卡主题的信息。

流API

此 API 允许客户端充当流处理器,通过消耗来自一个或多个主题的流以及生成流到其他输出主题。这允许转换输入和输出流。

连接器API

此 API 允许您编写可重复使用的生产者和消费者代码。例如,如果我们想要读取任何 RDBMS 的数据,将数据发布到主题中,并消耗主题中的数据并编写到 RDBMS。使用连接器 API,我们可以为各种数据源创建可重复使用的源和沉接器组件。

卡夫卡是用来做什么的?

卡夫卡用于以下使用案例:

消息传递系统

Kafka 使用企业消息传递系统将源和目标系统脱钩以交换数据。与 JMS 相比,Kafka 提供具有分区和故障耐受性的高吞吐量和复制性。

网络活动跟踪

这允许您在网站上跟踪用户旅程事件,以进行分析和离线数据处理。

日志聚合

这处理来自各种系统的日志,尤其是在分布式环境中,这些环境中基于微服务的架构将系统部署在各种主机上。我们需要汇总来自各种系统的日志,并将日志放在中心位置进行分析。对于更深入的潜水,我建议浏览以下关于使用 Kafka 的分布式伐木架构的文章 :https://smarttechie.org/2017/07/31/distributed-logging-architecture-for-micro-services/

指标收集器

Kafka 用于从各种系统和网络收集用于操作监控的指标。有卡夫卡指标记者可用于监测工具,如 甘利亚石墨等。

关于这方面的一些参考可以在 GitHub上找到。

什么是经纪人?

卡夫卡集群中的实例称为经纪人 我们连接到访问群集的中间商实例也称为引导服务器。每个经纪商都由聚类中的数值 ID 标识。从卡夫卡集群开始三个经纪人是一个很好的数字。但也有集群,有数百个经纪人在里面。

什么是主题?

主题是记录发布到的逻辑名称。在内部,主题被划分为数据发布的分区。这些分区分布在集群中的经纪人之间。例如,如果一个主题有三个分区,三个中间商在一个集群中,每个经纪人有一个分区。发布到分区的数据仅附有偏移增量。

以下是我们在处理分区时需要记住的几点。

  • 主题由他们的名字标识。我们可以在群集中有许多主题。
  • 消息的顺序保持在分区级别,而不是整个主题。
  • 一旦数据被写入分区,它就不能被覆盖。这称为不变性。
  • 分区中的消息存储有密钥、值和时间戳。Kafka 确保消息发布到给定密钥的同一分区。
  • 从卡夫卡集群,每个分区将有一个领导者,将采取读/写操作到该分区。

在上一个例子中,我创建了一个主题,其中三个分区的复制系数为 3。在这种情况下,由于集群有三个经纪人,三个分区均匀分布,每个分区的复制品复制给另外两个经纪人。由于复制系数为 3,因此即使有 2 家经纪商下跌,也没有数据丢失。始终保持复制因子大于 1,小于或等于集群中的经纪商数量。您无法创建一个具有复制因子超过集群中经纪人数量的主题。

在上图中,对于每个分区,都有一个领导者(发光分区)和其他同步副本(灰色出分区)是关注者。对于分区 0, 经纪人 -1 是领导者, 而经纪人 -2 和经纪人 – 3 是追随者。所有读/写到分区 0 将去经纪人-1 和相同的将被复制到经纪人-2和经纪人-3.

现在,让我们创建一个卡夫卡集群与三个经纪人遵循以下步骤。

创建卡夫卡集群

下载最新版本的 阿帕奇卡夫卡。在此示例中,我使用 1.0。提取文件夹并将其移动到垃圾箱文件夹中。开始动物园管理员。

动物园管理员是管理分区的经纪人和领导人选举的协调服务, 它提醒卡夫卡时, 主题或经纪人的变化 (e,已删除、创建等)。在这个例子中,我只启动了一个动物园管理员实例。在生产环境中,我们应该有更多的动物园管理员实例来管理故障。 没有动物园管理员,卡夫卡集群就无法工作。

./zookeeper-server-start.sh ../config/zookeeper.properties 

现在开始卡夫卡经纪人。在这个例子中,我们将开始三个经纪人。转到 Kafka 根文件下的配置文件夹,并复制服务器。 属性文件三次,并将其命名为 server_1.propertiesserver_2.propertiesserver_3.properties “。更改这些文件中的以下属性。

属性文件

x
1
14
1

2
broker.id=1
3
听众=普莱泰斯特://:9091
4
日志. dirs=/tmp / 卡夫卡日志 - 1
5

6
#####server_2. 属性######
7
broker.id=2
8
听众=普莱泰斯特://:9092
9
=/tmp/卡夫卡日志-2

10

11
######server_3.属性#####
12
broker.id=3
13
听众=普莱特克斯特://:9093
14
日志. dirs=/tmp / 卡夫卡日志 - 3

现在运行以下命令的三个经纪人。

1
###Start经纪人1#######
2

3
。/kafka-server-start.sh./配置/server_1. 属性
4

5
###Start经纪人2#######
6

7
。/kafka-server-start.sh./配置/server_2. 属性
8

9
###Start经纪人3#######
10

11


使用以下命令创建主题。

x
1
1
-创建-动物园管理员-复制因素3-分区3-主题 first_topic

使用 Kafka 的控制台制作人向上述步骤中创建的主题生成一些消息 这将是获得访问整个群集的引导服务器。

使用 Kafka 的控制台消费者消费消息。对于 Kafka 消费者,将任何一个经纪地址作为引导服务器提及。请记住,在阅读邮件时,您可能看不到顺序,因为顺序维护在分区级别,而不是主题级别。

如果您愿意,您可以使用以下命令描述主题,查看分区的分布方式,以及每个分区的领导者。

x
1
1
描述 -- 动物园管理员 本地主播:2181 -- 主题 first_topic

2

3
#####上述命令的结果#####
4

5
1122,3,1
6

7
33,1,2

在上面的描述中,经纪人-1是分区的领导者:0和经纪人-1,经纪人-2,和经纪人-3有每个分区的副本。

在下一篇文章中,我们将看到生产者和消费者爪哇API

Comments are closed.