在Ubuntu 18.04上安装Apache Kafka的方法

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 在Ubuntu 18.04上安装Apache Kafka的方法

介绍

Apache Kafka 是一个流行的分布式消息代理,旨在高效处理大量实时数据。Kafka 集群不仅高度可扩展和容错,而且与其他消息代理(如 ActiveMQ 和 RabbitMQ)相比,吞吐量更高。虽然它通常用作 发布/订阅 消息系统,但许多组织也将其用于日志聚合,因为它为发布的消息提供了持久存储。

发布/订阅消息系统允许一个或多个生产者发布消息,而不考虑消费者的数量或它们如何处理消息。订阅的客户端会自动收到关于更新和新消息创建的通知。这个系统比客户端定期轮询以确定是否有新消息可用的系统更高效和可扩展。

在本教程中,您将在 Ubuntu 18.04 上安装和使用 Apache Kafka 2.1.1。

先决条件

要跟随本教程,您需要:

  • 一个 Ubuntu 18.04 服务器和一个具有 sudo 权限的非 root 用户。如果您尚未设置非 root 用户,请按照本指南中的步骤进行设置。
  • 服务器上至少 4GB 的 RAM。RAM 少于此数量可能导致 Kafka 服务失败,Java 虚拟机(JVM)在启动过程中抛出 “内存不足” 异常。
  • 在服务器上安装 OpenJDK 8。要安装此版本,请按照安装特定版本的 OpenJDK 的说明进行操作。Kafka 是用 Java 编写的,因此它需要 JVM;但是,它的启动 shell 脚本存在版本检测错误,导致在 JVM 版本高于 8 时无法启动。

步骤 1 —— 为 Kafka 创建用户

由于 Kafka 可以通过网络处理请求,因此您应该为其创建一个专用用户。这样可以最大程度地减少 Kafka 服务器被入侵对 Ubuntu 机器造成的损害。在本步骤中,我们将创建一个名为 kafka 的专用用户,但是在设置完 Kafka 后,您应该创建一个不同的非 root 用户来执行此服务器上的其他任务。

以非 root sudo 用户身份登录,使用 useradd 命令创建一个名为 kafka 的用户:

sudo useradd kafka -m

-m 标志确保为用户创建一个家目录。这个家目录 /home/kafka 将作为我们在下面各节中执行命令的工作空间目录。

使用 passwd 设置密码:

sudo passwd kafka

使用 adduser 命令将 kafka 用户添加到 sudo 组,以便它具有安装 Kafka 依赖所需的权限:

sudo adduser kafka sudo

您的 kafka 用户现在已准备就绪。使用 su 登录到此帐户:

su -l kafka

现在我们已经创建了 Kafka 专用用户,可以继续下载并提取 Kafka 二进制文件。

步骤 2 —— 下载和提取 Kafka 二进制文件

让我们将 Kafka 二进制文件下载并提取到 kafka 用户的家目录中的专用文件夹中。

首先,在 /home/kafka 中创建一个名为 Downloads 的目录以存储您的下载:

mkdir ~/Downloads

使用 curl 下载 Kafka 二进制文件:

curl "https://www.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz

创建一个名为 kafka 的目录并切换到此目录。这将是 Kafka 安装的基本目录:

mkdir ~/kafka && cd ~/kafka

使用 tar 命令提取您下载的存档:

tar -xvzf ~/Downloads/kafka.tgz --strip 1

我们使用 --strip 1 标志确保将存档的内容提取到 ~/kafka/ 本身,而不是提取到它内部的另一个目录(例如 ~/kafka/kafka_2.11-2.1.1/)中。

现在我们已成功下载并提取了二进制文件,可以继续配置 Kafka 以允许主题删除。

步骤 3 —— 配置 Kafka 服务器

Kafka 的默认行为不允许我们删除 主题,即可发布消息的类别、组或源名称。为了修改这一点,让我们编辑配置文件。

Kafka 的配置选项在 server.properties 中指定。使用 nano 或您喜欢的编辑器打开此文件:

nano ~/kafka/config/server.properties

让我们添加一个设置,允许我们删除 Kafka 主题。在文件底部添加以下内容:

delete.topic.enable = true

保存文件并退出 nano。现在我们已经配置了 Kafka,可以继续创建 systemd 单元文件以运行并在启动时启用它。

步骤 4 —— 创建 Systemd 单元文件并启动 Kafka 服务器

在本节中,我们将为 Kafka 服务创建 systemd 单元文件。这将帮助我们执行常见的服务操作,如以与其他 Linux 服务一致的方式启动、停止和重新启动 Kafka。

Zookeeper 是 Kafka 用于管理其集群状态和配置的服务。它通常作为许多分布式系统中的一个组成部分而被广泛使用。如果您想了解更多信息,请访问官方的 Zookeeper 文档。

创建 zookeeper 的单元文件:

sudo nano /etc/systemd/system/zookeeper.service

将以下单元定义输入到文件中:

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target

[Unit] 部分指定了 Zookeeper 在启动之前需要网络和文件系统准备就绪。

[Service] 部分指定了 systemd 应该使用 zookeeper-server-start.shzookeeper-server-stop.sh shell 文件来启动和停止服务。它还指定了如果 Zookeeper 异常退出,应该自动重新启动。

接下来,为 kafka 创建 systemd 服务文件:

sudo nano /etc/systemd/system/kafka.service

将以下单元定义输入到文件中:

[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target

[Unit] 部分指定了此单元文件依赖于 zookeeper.service。这将确保在 kafka 服务启动时自动启动 zookeeper

[Service] 部分指定了 systemd 应该使用 kafka-server-start.shkafka-server-stop.sh shell 文件来启动和停止服务。它还指定了如果 Kafka 异常退出,应该自动重新启动。

现在单元已经定义好了,使用以下命令启动 Kafka:

sudo systemctl start kafka

为了确保服务器已成功启动,检查 kafka 单元的日志:

sudo journalctl -u kafka

您应该会看到类似以下的输出:

Jul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.

现在您有一个监听端口 9092 的 Kafka 服务器。

虽然我们已经启动了 kafka 服务,但如果我们重新启动服务器,它将不会自动启动。要在服务器启动时启用 kafka,运行:

sudo systemctl enable kafka

现在我们已经启动并启用了服务,让我们检查安装。

步骤 5 —— 测试安装

让我们发布和消费一个 “Hello World” 消息,以确保 Kafka 服务器的行为正常。在 Kafka 中发布消息需要:

  • 一个 生产者,它使记录和数据发布到主题成为可能。
  • 一个 消费者,它从主题中读取消息和数据。

首先,通过输入以下命令创建一个名为 TutorialTopic 的主题:

~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

您可以使用 kafka-console-producer.sh 脚本从命令行创建一个生产者。它需要 Kafka 服务器的主机名、端口和一个主题名称作为参数。

通过输入以下命令,将字符串 "Hello, World" 发布到 TutorialTopic 主题:

echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

接下来,您可以使用 kafka-console-consumer.sh 脚本创建一个 Kafka 消费者。它需要 ZooKeeper 服务器的主机名和端口,以及一个主题名称作为参数。

以下命令从 TutorialTopic 消费消息。请注意使用了 --from-beginning 标志,它允许消费在消费者启动之前发布的消息:

~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

如果没有配置问题,您应该在终端中看到 Hello, World

Hello, World

该脚本将继续运行,等待更多消息发布到主题。随时可以打开一个新的终端并启动一个生产者,以发布更多消息。您应该能够在消费者的输出中看到它们。

测试完成后,按 CTRL+C 停止消费者脚本。现在我们已经测试了安装,让我们继续安装 KafkaT。

步骤 6 — 安装 KafkaT(可选)

KafkaT 是 Airbnb 推出的一个工具,它可以让你更轻松地从命令行查看 Kafka 集群的详细信息并执行某些管理任务。由于它是一个 Ruby gem,所以你需要安装 Ruby 来使用它。你还需要安装 build-essential 软件包以便构建它所依赖的其他 gem。使用 apt 安装它们:

sudo apt install ruby ruby-dev build-essential

现在你可以使用 gem 命令安装 KafkaT:

sudo gem install kafkat

KafkaT 使用 .kafkatcfg 作为配置文件,用于确定你的 Kafka 服务器的安装目录和日志目录。它还应该有一个指向你的 ZooKeeper 实例的条目。

创建一个名为 .kafkatcfg 的新文件:

nano ~/.kafkatcfg

添加以下行以指定有关你的 Kafka 服务器和 Zookeeper 实例的必要信息:

{
  "kafka_path": "~/kafka",
  "log_path": "/tmp/kafka-logs",
  "zk_path": "localhost:2181"
}

现在你已经准备好使用 KafkaT 了。首先,以下是如何使用它查看所有 Kafka 分区的详细信息:

kafkat partitions

你将看到以下输出:

Topic                 Partition   Leader      Replicas        ISRs    
TutorialTopic         0             0         [0]             [0]
__consumer_offsets    0             0         [0]             [0]
...
...

你将看到 TutorialTopic,以及 __consumer_offsets,这是 Kafka 用于存储与客户端相关信息的内部主题。你可以安全地忽略以 __consumer_offsets 开头的行。

要了解更多关于 KafkaT 的信息,请参阅其 GitHub 仓库。

步骤 7 — 设置多节点集群(可选)

如果你想使用更多的 Ubuntu 18.04 机器创建一个多 broker 集群,你应该在每台新机器上重复执行步骤 1、步骤 4 和步骤 5。此外,你还应该对每台机器的 server.properties 文件进行以下更改:

  • broker.id 属性的值应该被更改,以便在整个集群中是唯一的。该属性唯一标识集群中的每个服务器,并且可以将任何字符串作为其值。例如,"server1""server2" 等。
  • zookeeper.connect 属性的值应该被更改,以便所有节点指向同一个 ZooKeeper 实例。该属性指定了 Zookeeper 实例的地址,并遵循 <主机名/IP_地址>:<端口> 的格式。例如,"203.0.113.0:2181""203.0.113.1:2181" 等。

如果你想为你的集群拥有多个 ZooKeeper 实例,每个节点上 zookeeper.connect 属性的值应该是一个相同的、用逗号分隔的字符串,列出所有 ZooKeeper 实例的 IP 地址和端口号。

步骤 8 — 限制 Kafka 用户

现在所有的安装都已完成,你可以移除 kafka 用户的管理员权限。在这样做之前,请注销并以任何其他非 root sudo 用户登录。如果你仍在运行你开始本教程的相同 shell 会话,只需输入 exit

从 sudo 组中移除 kafka 用户:

sudo deluser kafka sudo

为了进一步提高 Kafka 服务器的安全性,使用 passwd 命令锁定 kafka 用户的密码。这样可以确保没有人可以直接使用这个帐户登录到服务器:

sudo passwd kafka -l

此时,只有 root 用户或一个 sudo 用户可以通过以下命令登录为 kafka

sudo su - kafka

将来,如果你想解锁它,可以使用 passwd 命令并带上 -u 选项:

sudo passwd kafka -u

现在你已成功限制了 kafka 用户的管理员权限。

结论

现在你已经在你的 Ubuntu 服务器上安全地运行 Apache Kafka。你可以通过使用 Kafka 客户端在你的项目中创建 Kafka 生产者和消费者,Kafka 客户端可用于大多数编程语言。要了解更多关于 Kafka 的信息,你也可以参考其文档。


目录
相关文章
|
1月前
|
消息中间件 安全 Kafka
Apache Kafka安全加固指南:保护你的消息传递系统
【10月更文挑战第24天】在现代企业环境中,数据的安全性和隐私保护至关重要。Apache Kafka作为一款广泛使用的分布式流处理平台,其安全性直接影响着业务的稳定性和用户数据的安全。作为一名资深的Kafka使用者,我深知加强Kafka安全性的重要性。本文将从个人角度出发,分享我在实践中积累的经验,帮助读者了解如何有效地保护Kafka消息传递系统的安全性。
58 7
|
1月前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
75 5
|
1月前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
67 4
|
1月前
|
消息中间件 监控 大数据
优化Apache Kafka性能:最佳实践与调优策略
【10月更文挑战第24天】作为一名已经对Apache Kafka有所了解并有实际使用经验的开发者,我深知在大数据处理和实时数据流传输中,Kafka的重要性不言而喻。然而,在面对日益增长的数据量和业务需求时,如何保证系统的高性能和稳定性成为了摆在我们面前的一个挑战。本文将从我的个人视角出发,分享一些关于如何通过合理的配置和调优来提高Kafka性能的经验和建议。
68 4
|
19天前
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
143 50
|
5天前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
15 1
|
1月前
|
消息中间件 Java Kafka
初识Apache Kafka:搭建你的第一个消息队列系统
【10月更文挑战第24天】在数字化转型的浪潮中,数据成为了企业决策的关键因素之一。而高效的数据处理能力,则成为了企业在竞争中脱颖而出的重要武器。在这个背景下,消息队列作为连接不同系统和服务的桥梁,其重要性日益凸显。Apache Kafka 是一款开源的消息队列系统,以其高吞吐量、可扩展性和持久性等特点受到了广泛欢迎。作为一名技术爱好者,我对 Apache Kafka 产生了浓厚的兴趣,并决定亲手搭建一套属于自己的消息队列系统。
50 2
初识Apache Kafka:搭建你的第一个消息队列系统
|
2月前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
151 4
Linux系统之Ubuntu安装cockpit管理工具
|
1月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
61 2
|
2月前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
179 1