Kafka快速入门

发布于:2024-10-16 ⋅ 阅读:(9) ⋅ 点赞:(0)

Kafka简介:

Apache Kafka 是一个分布式流处理平台,由 LinkedIn 开发并开源,后来成为 Apache 软件基金会的顶级项目。Kafka 主要用于构建实时数据管道和流式应用程序。它具有高吞吐量、可扩展性和容错性,能够处理数百万级别的读写请求。

Kafka 的核心特性包括:

  1. 发布-订阅消息队列:Kafka 允许生产者(发布者)发送消息到主题(Topic),消费者(订阅者)从主题读取消息。这使得 Kafka 可以作为消息队列、消息总线或数据集成层使用。

  2. 持久化存储:Kafka 将消息持久化到磁盘,并支持数据复制,确保消息不会丢失,并可以在系统故障后恢复。

  3. 分布式系统:Kafka 通过分区(Partition)和副本(Replication)机制实现分布式,提高了系统的可扩展性和容错性。

  4. 实时流处理:Kafka Streams 和 Kafka Connect 提供了实时数据流处理和集成解决方案,可以与现有的数据存储和分析工具集成。

  5. 可扩展性:Kafka 集群可以轻松地通过增加更多的服务器来扩展,以处理更多的数据流量。

  6. 容错性:Kafka 通过副本机制确保数据的持久性和可靠性。如果某个代理(Broker)失败,其他代理可以接管其任务。

  7. 生态系统:Kafka 拥有丰富的生态系统,包括 Kafka Connect、Kafka Streams、Confluent Schema Registry 等,这些工具和库扩展了 Kafka 的功能,使其更加强大和灵活。

  8. 社区支持:作为 Apache 基金会的一部分,Kafka 拥有一个活跃的社区,不断有新的特性和改进被贡献和发布。

Kafka 通常用于日志聚合、事件源、流处理、实时分析、数据管道和微服务架构中的消息传递。它的设计使其成为处理大规模数据流的理想选择,特别是在需要高吞吐量和低延迟的场景中。

安装步骤

Step 1: 获取 Kafka

首先,您需要从 Apache Kafka 的官方网站下载最新的 Kafka 发行版。下载完成后,您需要解压该文件。

$ tar -xzf kafka_2.13-3.8.0.tgz
$ cd kafka_2.13-3.8.0

Step 2: 启动 Kafka 环境

在开始之前,请确保您的本地环境已安装 Java 8 或更高版本。

Kafka 可以使用 KRaft 或 ZooKeeper 模式启动。您可以选择其中一种配置来启动 Kafka 服务器。

使用 KRaft 模式
  1. 生成集群 UUID

    $ KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
  2. 格式化日志目录

    $ bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
  3. 启动 Kafka 服务器

    $ bin/kafka-server-start.sh config/kraft/server.properties
使用 ZooKeeper 模式
  1. 启动 ZooKeeper 服务

    $ bin/zookeeper-server-start.sh config/zookeeper.properties
  2. 打开另一个终端会话,启动 Kafka 代理服务

    $ bin/kafka-server-start.sh config/server.properties
使用 Docker 镜像
  1. 获取 Kafka Docker 镜像

    $ docker pull apache/kafka:3.8.0
  2. 启动 Kafka Docker 容器

    $ docker run -p 9092:9092 apache/kafka:3.8.0

Step 3: 创建主题以存储事件

Kafka 是一个分布式事件流平台,允许您在多台机器上读取、写入、存储和处理事件(也称为记录或消息)。

在写入第一个事件之前,您需要创建一个主题。打开另一个终端会话并运行以下命令:

$ bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

您可以使用以下命令查看主题的详细信息:

$ bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092

Step 4: 将一些事件写入主题

Kafka 客户端通过网络与 Kafka 代理通信,以写入(或读取)事件。一旦接收到事件,代理将以持久和容错的方式存储这些事件。

运行控制台生产者客户端,将一些事件写入您的主题:

$ bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
>This is my first event
>This is my second event

您可以通过按 Ctrl-C 随时停止生产者客户端。

Step 5: 读取事件

打开另一个终端会话,运行控制台消费者客户端来读取您刚刚创建的事件:

$ bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event

您可以通过按 Ctrl-C 随时停止消费者客户端。

Step 6: 使用 Kafka Connect 导入/导出数据

Kafka Connect 允许您持续地将数据从外部系统导入到 Kafka,以及从 Kafka 导出到外部系统。它运行连接器,实现与外部系统的自定义逻辑。

首先,确保将 connect-file-3.8.0.jar 添加到 Connect 工作节点的配置中的 plugin.path 属性。

编辑 config/connect-standalone.properties 文件,添加或更改 plugin.path 配置属性,并保存文件:

$ echo "plugin.path=libs/connect-file-3.8.0.jar" >> config/connect-standalone.properties

然后,创建一些种子数据来测试:

$ echo -e "foo\nbar" > test.txt

或者,在 Windows 上:

$ echo foo > test.txt
$ echo bar >> test.txt

接下来,我们将启动两个连接器,以独立模式运行,这意味着它们将在单个、本地、专用的进程中运行。我们提供三个配置文件作为参数。第一个是 Kafka Connect 进程的配置,包含连接到 Kafka 代理和数据的序列化格式的常见配置。其余的配置文件每个都指定一个连接器来创建。这些文件包括一个唯一的连接器名称、要实例化的连接器类以及连接器所需的任何其他配置。

$ bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties

这些示例配置文件,包含在 Kafka 中,使用您之前启动的本地集群配置,并创建两个连接器:第一个是源连接器,从输入文件读取行并将每个行生成到 Kafka 主题,第二个是汇连接器,从 Kafka 主题读取消息并将每个消息作为输出文件中的一行。

Step 7: 使用 Kafka Streams 处理事件

一旦您的数据作为事件存储在 Kafka 中,您可以使用 Kafka Streams 客户端库(Java/Scala)处理数据。它允许您实现关键任务实时应用程序和微服务,其中输入和/或输出数据存储在 Kafka 主题中。Kafka Streams 结合了在客户端编写和部署标准 Java 和 Scala 应用程序的简便性与 Kafka 的服务器端集群技术的优势,使这些应用程序具有高可扩展性、弹性、容错性和分布式特性。该库支持精确一次处理、有状态操作和聚合、窗口、连接、基于事件时间的处理等。

以下是如何实现流行的 WordCount 算法的示例:

KStream<String, String> textLines = builder.stream("quickstart-events");

KTable<String, Long> wordCounts = textLines
            .flatMapValues(line -> Arrays.asList(line.toLowerCase().split(" ")))
            .groupBy((keyIgnored, word) -> word)
            .count();

wordCounts.toStream().to("output-topic", Produced.with(Serdes.String(), Serdes.Long()));

Step 8: 终止 Kafka 环境

现在您已经完成了 Kafka 的快速入门,可以随意拆除 Kafka 环境,或者继续探索。

  1. 如果您还没有这样做,请使用 Ctrl-C 停止生产者和消费者客户端。

  2. 使用 Ctrl-C 停止 Kafka 代理。

  3. 如果您遵循了使用 ZooKeeper 的部分,请使用 Ctrl-C 停止 ZooKeeper 服务器。

如果您还想删除本地 Kafka 环境的数据,包括您创建的事件,可以运行以下命令:

$ rm -rf /tmp/kafka-logs /tmp/zookeeper /tmp/kraft-combined-logs

Kafka数据发送流程示例图: