理解卡夫卡的初学者指南

目录

介绍

数据系统组成

卡夫卡体系结构

关键组件和相关术语

Zookeeper

卡夫卡内部构件

Windows上的Kafka设置

先决条件

安装文件

执行

参考资料


这是数字时代。到处都是数据,这段时间我们都会听到有关Kafka的信息。我从事的一个项目涉及整个数据系统(带有Java后端),该系统利用Kafka来实现通过各种渠道和部门处理大量数据的功能。在进行处理时,我想到了在Windows中探索设置的方法。因此,本指南可帮助您了解Kafka,并展示Windows环境中数据管道的设置和测试。

  • GitHub下载更新的Kafka演示设置文件

理解卡夫卡的初学者指南_第1张图片

JavaScala中的一个开源项目

介绍

Apache Kafka是具有三个主要功能的分布式流平台

  • 消息系统 ——发布-订阅记录流
  • 可用性和可靠性 ——以容错的持久方式存储记录流
  • 可扩展和实时——处理记录流

数据系统组成

Kafka通常用于将数据流式传输到应用程序数据湖和实时流分析系统中

理解卡夫卡的初学者指南_第2张图片

应用程序将消息输入到Kafka服务器上。这些消息可以是计划捕获的任何已定义信息。它以可靠的方式(由于采用分布式Kafka架构)传递给另一个应用程序或服务,以对其进行处理或重新处理。

在内部,Kafka使用数据结构来管理其消息。这些消息具有在此数据结构的单元级别应用的保留策略。保留时间是可配置的——基于时间或基于大小。默认情况下,发送的数据存储168小时7天)。

卡夫卡体系结构

通常,将有多个生产者,消费者,集群来处理消息。通过添加更多代理可以轻松完成水平扩展。下图描述了示例架构:

理解卡夫卡的初学者指南_第3张图片

Kafka通过TCP协议在客户端和服务器之间进行通信。有关更多详细信息,请参阅《Kafka协议指南》

Kafka生态系统提供了REST代理,该代理也允许通过HTTPJSON轻松集成。

首先,它具有四个关键APIProducer APIConsumer APIStreams APIConnector API

关键组件和相关术语

  • Messages/Records ——对象的字节数组。包含键、值和时间戳
  • Topic ——类别中的消息提要
  • Producer ——将消息发布到Kafka主题的过程
  • Consumer ——订阅主题并处理已发布消息的主题的过程
  • Broker——它主持主题。也称为Kafka ServerKafka Node
  • Cluster ——由一个或多个代理组成
  • Zookeeper ——保持集群状态(代理、主题、消费者)
  • Connector ——将主题连接到现有应用程序或数据系统
  • Stream Processor ——使用主题的输入流,并生成输出主题的输出流
  • ISR (同步副本)——复制以支持故障转移
  • Controller——集群中的代理,负责维护所有分区的领导者/从属者关系

Zookeeper

Apache ZooKeeper是一个开放源代码,可帮助构建分布式应用程序。这是用于维护配置信息的集中服务。它承担的职责如下:

  • Broker 状态——维护活动代理的列表以及它们属于哪个集群
  • Topics 已配置——维护所有主题的列表,每个主题的分区数量,所有副本的位置,谁是首选领导者,分区的ISR列表
  • Controller 选举 ——每当节点关闭时选择一个新的控制器。另外,请确保在任何给定时间只有一个控制器
  • ACL 信息 ——维护所有主题的访问控制列表(ACL

卡夫卡内部构件

Brokers集群中的区分基于ID,其通常是唯一数字。连接到一个代理程序会将客户端引导到整个Kafka群集。它们从生产者接收消息,并允许消费者按主题、分区和偏移量获取消息。

 Topic作为一个或多个分区的逻辑组分布在Kafka群集中。分区定义为分布在多个代理中的消息的有序序列。在创建过程中,可以配置每个主题的分区数。

Producers写主题。Consumers阅读主题。

理解卡夫卡的初学者指南_第4张图片

Kafka使用Log数据结构来管理其消息。日志数据结构是一个有序的Segments集合,它是消息的集合。每个段都有帮助查找消息的文件:

  1. 日志文件——存储消息
  2. 索引文件——将消息偏移量及其起始位置存储在日志文件中

Kafka将生产者的记录追加到主题日志的末尾。消费者可以从任何已提交的偏移量中读取数据,并允许他们从他们选择的任何偏移点中读取数据。仅当所有用于分区的ISR写入其日志时,该记录才被视为已提交

理解卡夫卡的初学者指南_第5张图片

在多个分区中,只有一个领导者,其余的则是要用作备份的副本/跟随者。如果领导者失败,则选择一个ISR作为新领导者。领导者执行对特定主题分区的所有读取和写入。追随者被动地复制领导者。允许消费者仅从领导者分区读取。

分区的引导者和跟随者永远不能驻留在同一节点上。

Kafka还支持log compaction记录。有了它,Kafka将保留记录的最新版本并删除旧版本。这导致了一种精细的保留机制,其中保留了每个密钥的最新更新。

Offset manager负责存储、获取和维护消费者补偿。每个实时代理都有一个抵消管理器实例。默认情况下,使用者配置为使用定期间隔的自动提交策略。或者,使用者可以使用提交API进行手动偏移管理。

Kafka使用特定主题__consumer_offsets来保存消费者补偿。此偏移量记录每个组中每个使用者的读取位置。这有助于消费者在需要时追溯其最后的位置。通过向代理提供补偿,消费者不再依赖ZooKeeper

引用:

Kafka的较旧版本(0.9版之前)仅在ZooKeeper中存储偏移量,而默认情况下,Kafka的较新版本将偏移量存储在内部Kafka主题__consumer_offsets

理解卡夫卡的初学者指南_第6张图片

Kafka允许消费者组从主题并行读取数据。组中的所有使用者都具有相同的组ID。在同一时间,组中只有一个使用者可以使用分区中的消息,以保证从分区中读取消息的顺序。使用者可以读取多个分区。

Windows上的Kafka设置

理解卡夫卡的初学者指南_第7张图片

先决条件

  • Java SE运行时环境
    • 系统具有:jre-8u261-windows-x64.exe
  • Kafka
    • 示例应用程序使用:Scala 2.12 – kafka_2.12-2.5.0.tgz
  • 任何从* .tgz解压缩文件的解压缩工具
    • 我有Mac可以通过双击将其提取

安装文件

  1. 安装JRE——默认设置应该可以
  2. C:\Installs中解压缩Kafka文件(可以选择任意位置)。Kafka数据管道设置所需的所有脚本文件都位于:C:\Installs\kafka_2.12-2.5.0\bin\windows
  3. 根据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
  • ZooKeeperlocalhost:2181开始。保持运行。

理解卡夫卡的初学者指南_第8张图片

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命令提示符并键入任何其他消息,以查看它们实时显示在消费者命令提示符中:

理解卡夫卡的初学者指南_第9张图片

 

6、Check/Observe ——幕后的一些关键变更

  • 在主题下创建的文件 ——它们跟踪为给定主题推送的消息:

理解卡夫卡的初学者指南_第10张图片

  • 日志文件中的数据——生产者推送的所有消息都存储在这里:

理解卡夫卡的初学者指南_第11张图片

  • 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设置查看生产者发送的消息和消费者接收的消息。

理解卡夫卡的初学者指南_第12张图片

当我尝试设置Kafka时,我在路上遇到了几个问题。我已经记录了它们以供参考。如果其他人遇到类似问题,这也应该有所帮助:故障排除:Windows上的Kafka设置

从此处下载适用于Windows的完整修改后的安装文件:GithubKafka演示安装文件

参考资料

  • https://kafka.apache.org
  • https://cwiki.apache.org/confluence/display/KAFKA
  • https://docs.confluent.io/2.0.0/clients/consumer.html

你可能感兴趣的:(管理/方法/理论,架构及框架,卡夫卡,kafka)