目录
这是数字时代。到处都是数据,这段时间我们都会听到有关Kafka的信息。我从事的一个项目涉及整个数据系统(带有Java后端),该系统利用Kafka来实现通过各种渠道和部门处理大量数据的功能。在进行处理时,我想到了在Windows中探索设置的方法。因此,本指南可帮助您了解Kafka,并展示Windows环境中数据管道的设置和测试。
Java和Scala中的一个开源项目
介绍
Apache Kafka是具有三个主要功能的分布式流平台:
- 消息系统 ——发布-订阅记录流
- 可用性和可靠性 ——以容错的持久方式存储记录流
- 可扩展和实时——处理记录流
数据系统组成
Kafka通常用于将数据流式传输到应用程序,数据湖和实时流分析系统中。
应用程序将消息输入到Kafka服务器上。这些消息可以是计划捕获的任何已定义信息。它以可靠的方式(由于采用分布式Kafka架构)传递给另一个应用程序或服务,以对其进行处理或重新处理。
在内部,Kafka使用数据结构来管理其消息。这些消息具有在此数据结构的单元级别应用的保留策略。保留时间是可配置的——基于时间或基于大小。默认情况下,发送的数据存储168小时(7天)。
卡夫卡体系结构
通常,将有多个生产者,消费者,集群来处理消息。通过添加更多代理可以轻松完成水平扩展。下图描述了示例架构:
Kafka通过TCP协议在客户端和服务器之间进行通信。有关更多详细信息,请参阅《Kafka协议指南》。
Kafka生态系统提供了REST代理,该代理也允许通过HTTP和JSON轻松集成。
首先,它具有四个关键API:Producer API,Consumer API,Streams API,Connector API
关键组件和相关术语
- Messages/Records ——对象的字节数组。包含键、值和时间戳
- Topic ——类别中的消息提要
- Producer ——将消息发布到Kafka主题的过程
- Consumer ——订阅主题并处理已发布消息的主题的过程
- Broker——它主持主题。也称为Kafka Server或Kafka Node
- Cluster ——由一个或多个代理组成
- Zookeeper ——保持集群状态(代理、主题、消费者)
- Connector ——将主题连接到现有应用程序或数据系统
- Stream Processor ——使用主题的输入流,并生成输出主题的输出流
- ISR (同步副本)——复制以支持故障转移
- Controller——集群中的代理,负责维护所有分区的领导者/从属者关系
Zookeeper
Apache ZooKeeper是一个开放源代码,可帮助构建分布式应用程序。这是用于维护配置信息的集中服务。它承担的职责如下:
- Broker 状态——维护活动代理的列表以及它们属于哪个集群
- Topics 已配置——维护所有主题的列表,每个主题的分区数量,所有副本的位置,谁是首选领导者,分区的ISR列表
- Controller 选举 ——每当节点关闭时选择一个新的控制器。另外,请确保在任何给定时间只有一个控制器
- ACL 信息 ——维护所有主题的访问控制列表(ACL)
卡夫卡内部构件
Brokers集群中的区分基于ID,其通常是唯一数字。连接到一个代理程序会将客户端引导到整个Kafka群集。它们从生产者接收消息,并允许消费者按主题、分区和偏移量获取消息。
Topic作为一个或多个分区的逻辑组分布在Kafka群集中。分区定义为分布在多个代理中的消息的有序序列。在创建过程中,可以配置每个主题的分区数。
Producers写主题。Consumers阅读主题。
Kafka使用Log数据结构来管理其消息。日志数据结构是一个有序的Segments集合,它是消息的集合。每个段都有帮助查找消息的文件:
- 日志文件——存储消息
- 索引文件——将消息偏移量及其起始位置存储在日志文件中
Kafka将生产者的记录追加到主题日志的末尾。消费者可以从任何已提交的偏移量中读取数据,并允许他们从他们选择的任何偏移点中读取数据。仅当所有用于分区的ISR写入其日志时,该记录才被视为已提交。
在多个分区中,只有一个领导者,其余的则是要用作备份的副本/跟随者。如果领导者失败,则选择一个ISR作为新领导者。领导者执行对特定主题分区的所有读取和写入。追随者被动地复制领导者。允许消费者仅从领导者分区读取。
分区的引导者和跟随者永远不能驻留在同一节点上。
Kafka还支持log compaction记录。有了它,Kafka将保留记录的最新版本并删除旧版本。这导致了一种精细的保留机制,其中保留了每个密钥的最新更新。
Offset manager负责存储、获取和维护消费者补偿。每个实时代理都有一个抵消管理器实例。默认情况下,使用者配置为使用定期间隔的自动提交策略。或者,使用者可以使用提交API进行手动偏移管理。
Kafka使用特定主题__consumer_offsets来保存消费者补偿。此偏移量记录每个组中每个使用者的读取位置。这有助于消费者在需要时追溯其最后的位置。通过向代理提供补偿,消费者不再依赖ZooKeeper。
引用:
Kafka的较旧版本(0.9版之前)仅在ZooKeeper中存储偏移量,而默认情况下,Kafka的较新版本将偏移量存储在内部Kafka主题__consumer_offsets中
Kafka允许消费者组从主题并行读取数据。组中的所有使用者都具有相同的组ID。在同一时间,组中只有一个使用者可以使用分区中的消息,以保证从分区中读取消息的顺序。使用者可以读取多个分区。
Windows上的Kafka设置
先决条件
- Java SE运行时环境
- Kafka
- 示例应用程序使用:Scala 2.12 – kafka_2.12-2.5.0.tgz
- 任何从* .tgz中解压缩文件的解压缩工具
- 我有Mac可以通过双击将其提取
安装文件
- 安装JRE——默认设置应该可以
- 在C:\Installs中解压缩Kafka文件(可以选择任意位置)。Kafka数据管道设置所需的所有脚本文件都位于:C:\Installs\kafka_2.12-2.5.0\bin\windows
- 根据Windows需要更改配置
- 设置Kafka日志—— 在C:\Installs\kafka_2.12-2.5.0位置创建一个文件夹'logs'
- 在Kafka配置文件中将此日志文件夹位置设置为C:\Installs\kafka_2.12-2.5.0\config\server.properties作为log.dirs =C:\Installs\kafka_2.12-2.5.0\logs
- 设置Zookeeper数据——在C:\Installs\kafka_2.12-2.5.0位置创建一个文件夹“data”
- 在Zookeeper配置文件中将此数据文件夹位置设置为C:\Installs\kafka_2.12-2.5.0\config\zookeeper.properties作为dataDir =C:\Installs\kafka_2.12-2.5.0\data
执行
1、ZooKeeper ——使用已经随同Kafka文件一起打包的便捷脚本,获得一个快速且肮脏的单节点ZooKeeper实例。
- 打开命令提示符并移至以下位置:C:\Installs\kafka_2.12-2.5.0\bin\windows
- 执行脚本:
zookeeper-server-start.bat C:\Installs\kafka_2.12-2.5.0\config\zookeeper.properties
- ZooKeeper从localhost:2181开始。保持运行。
2、Kafka Server——获取单节点Kafka实例。
- 打开另一个命令提示符,然后移至以下位置:C:\Installs\kafka_2.12-2.5.0\bin\windows
- ZooKeeper已在属性文件中配置为zookeeper.connect = localhost:2181
- 执行脚本:
kafka-server-start.bat C:\Installs\kafka_2.12-2.5.0\config\server.properties
- Kafka服务器从localhost:9092启动。保持运行。
现在,可以创建主题并可以存储消息。我们可以从任何客户端生成和使用数据。我们现在将使用命令提示符。
3、Topic——创建一个名为“testkafka”的主题
- 给定一个实例节点,将复制因子设为1,将分区设为1
- 打开另一个命令提示符,然后移至以下位置C:\Installs\kafka_2.12-2.5.0\bin\windows
- 执行脚本:
kafka-topics.bat --create --bootstrap-server localhost:9092
--replication-factor 1 --partitions 1 --topic testkafka
- 执行脚本以查看创建的主题:
kafka-topics.bat --list --bootstrap-server localhost:9092
- 保持命令提示符处于打开状态,以防万一。
4、Producer——设置发送消息到服务器
- 打开另一个命令提示符,然后移至以下位置:C:\Installs\kafka_2.12-2.5.0\bin\windows
- 执行脚本:
kafka-console-producer.bat --bootstrap-server localhost:9092 --topic testkafka
- 它将显示“>”作为提示键入消息。输入:“Kafka demo – Message from server”。
- 使命令提示符保持打开状态。我们将回到它来推送更多消息。
5、Consumer——设置为从服务器接收消息
- 打开另一个命令提示符,然后移至以下位置:C:\Installs\kafka_2.12-2.5.0\bin\windows
- 执行脚本:
kafka-console-consumer.bat --bootstrap-server localhost:9092
--topic testkafka --from-beginning
- 您将在此命令提示符窗口中看到生产者已发送的消息——“ Kafka演示——来自服务器的消息”。
- 返回到Producer命令提示符并键入任何其他消息,以查看它们实时显示在消费者命令提示符中:
6、Check/Observe ——幕后的一些关键变更
- 在主题下创建的文件 ——它们跟踪为给定主题推送的消息:
- 日志文件中的数据——生产者推送的所有消息都存储在这里:
- Kafka中存在的主题 ——消费者一旦开始从主题中读取消息,__consumer_offsets就会自动创建为主题:
注意:如果要选择Zookeeper来存储主题而不是Kafka服务器,则需要以下脚本命令:
- 主题创建:
kafka-topics.bat --create --zookeeper localhost:2181
--replication-factor 1 --partitions 1 --topic testkafka
- 主题视图:
kafka-topics.bat --list --zookeeper localhost:2181
通过以上操作,我们可以使用Kafka设置查看生产者发送的消息和消费者接收的消息。
当我尝试设置Kafka时,我在路上遇到了几个问题。我已经记录了它们以供参考。如果其他人遇到类似问题,这也应该有所帮助:故障排除:Windows上的Kafka设置。
从此处下载适用于Windows的完整修改后的安装文件:Github:Kafka演示安装文件