佛山从事网站建设,网站制作 推荐新鸿儒,如何绑定网站域名,品牌型网站建设方案前些天发现了一个人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;最重要的屌图甚多#xff0c;忍不住分享一下给大家。点击跳转到网站。
如何在 Ubuntu 20.04 上安装 Apache Kafka
介绍
Apache Kafka是一种分布式消息代理#xff0c;旨在处理大量实…前些天发现了一个人工智能学习网站通俗易懂风趣幽默最重要的屌图甚多忍不住分享一下给大家。点击跳转到网站。
如何在 Ubuntu 20.04 上安装 Apache Kafka
介绍
Apache Kafka是一种分布式消息代理旨在处理大量实时数据。Kafka 集群具有高度可扩展性和容错性。与ActiveMQ和RabbitMQ等其他消息代理相比它还具有更高的吞吐量。尽管它通常用作发布/订阅消息传递系统但许多项目也将其用于日志聚合因为它为已发布的消息提供持久存储。
发布/订阅消息系统允许一个或多个生产者发布消息而无需考虑消费者的数量或他们将如何处理消息。订阅的客户端会自动收到有关更新和新消息创建的通知。该系统比客户端定期轮询以确定是否有新消息可用的系统更高效且可扩展。
在本文中我们将在 Ubuntu 20.04 上安装和配置 Apache Kafka 2.8.2。
先决条件
要继续操作需要
具有至少 4 GB RAM 和具有sudo权限的非 root 用户的Ubuntu 20.04服务器。如果没有设置非 root 用户可以按照我的使用 Ubuntu 20.04 进行初始服务器设置进行设置。RAM 小于 4GB 的安装可能会导致 Kafka 服务失败。OpenJDK 11 。Kafka是用Java编写的因此需要JVM。
第 1 步 — 为 Kafka 创建用户
由于 Kafka 可以通过网络处理请求因此第一步是为该服务创建专用用户。如果有人破坏 Kafka 服务器这可以最大限度地减少对 Ubuntu 计算机的损害。在此步骤中创建一个专用kafka的用户。
以非 root的sudo用户身份登录到服务器然后创建一个名为kafka 的用户
sudo adduser kafka按照提示设置密码并创建kafka用户。
接下来使用命令将kafka用户添加到组中。我们需要这些权限来安装 Kafka 的依赖项
sudo adduser kafka sudo现在kafka用户现在已准备就绪。使用以下方式登录帐户
su -l kafka现在我们已经创建了 Kafka 特定的用户可以下载并提取 Kafka 二进制文件了。
第 2 步 — 下载并解压 Kafka 二进制文件
在此步骤中将下载 Kafka 二进制文件并将其解压到kafka用户主目录中的专用文件夹中。
首先在/home/kafka创建一个目录Downloads来存储下载
mkdir ~/Downloads用curl下载 Kafka 二进制文件
curl https://downloads.apache.org/kafka/2.8.2/kafka_2.13-2.8.2.tgz -o ~/Downloads/kafka.tgz创建一个名为 kafka的目录并移动到该目录。下来将使用此目录作为 Kafka 安装的基本目录
mkdir ~/kafka cd ~/kafka使用以下命令提取下载的存档
tar -xvzf ~/Downloads/kafka.tgz --strip 1指定该--strip 1标志以确保存档的内容是在~/kafka/其自身中提取的而不是在其中的另一个目录例如~/kafka/kafka_2.13-2.8.2/中提取的。
现在已成功下载并提取二进制文件可以开始配置 Kafka 服务器。
第 3 步 — 配置 Kafka 服务器
Kafka主题是可以发布消息的类别、组或主题名称。但是Kafka 的默认行为不允许删除主题。要修改此设置必须编辑配置文件下来将在此步骤中执行此操作。
Kafka 的配置选项在server.properties 中指定。使用最喜欢的编辑器nano打开此文件
nano ~/kafka/config/server.properties首先添加一个允许删除 Kafka 主题的设置。将以下行添加到文件底部
〜/ kafka / config / server.properties
delete.topic.enable true其次将通过修改属性来更改存储 Kafka 日志的目录log.dirs。找到该log.dirs属性并将现有路线替换为突出显示的路线
〜/ kafka / config / server.properties
log.dirs/home/kafka/logs保存并关闭文件。
现在我们已经配置了 Kafka可以创建systemd用于在启动时运行和启用 Kafka 服务器的单元文件。
第 4步 — 创建systemd单元文件并启动 Kafka 服务器
在本部分中我们将为Kafka 服务创建systemd单元文件。这些文件将帮助我们与其他 Linux 服务一致的方式执行常见的服务操作例如启动、停止和重新启动 Kafka。
Kafka 使用Zookeeper来管理其集群状态和配置最新版的可以选择是否是ZK。它被用于许多分布式系统中我们可以在官方 Zookeeper 文档中阅读有关该工具的更多信息。下面演示将使用 Zookeper 作为这些单元文件的服务。
创建单元文件zookeeper
sudo nano /etc/systemd/system/zookeeper.service在文件中输入以下单位定义
/etc/systemd/system/zookeeper.service
[Unit]
Requiresnetwork.target remote-fs.target
Afternetwork.target remote-fs.target[Service]
Typesimple
Userkafka
ExecStart/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restarton-abnormal[Install]
WantedBymulti-user.target该[Unit]部分指定 Zookeeper 需要网络和文件系统准备好才能启动。
该[Service]部分指定systemd应使用zookeeper-server-start.sh和zookeeper-server-stop.shshell 文件来启动和停止服务。它还指定如果Zookeeper异常退出则应重新启动。
添加此内容后保存并关闭文件。
接下来创建kafka systemd 服务文件
sudo nano /etc/systemd/system/kafka.service在文件中输入以下单位定义
/etc/systemd/system/kafka.service
[Unit]
Requireszookeeper.service
Afterzookeeper.service[Service]
Typesimple
Userkafka
ExecStart/bin/sh -c /home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties /home/kafka/kafka/kafka.log 21
ExecStop/home/kafka/kafka/bin/kafka-server-stop.sh
Restarton-abnormal[Install]
WantedBymulti-user.target该[Unit]部分指定该单元文件依赖于zookeeper.service这将确保在服务启动zookeeper时自动启动kafka。
该[Service]部分指定systemd应使用kafka-server-start.sh和kafka-server-stop.shshell 文件来启动和停止服务。它还指定如果Kafka异常退出则应重新启动。
保存并关闭文件。
现在已经定义了单位使用以下命令启动 Kafka
sudo systemctl start kafka要确保服务器已成功启动请检查该kafka单元的日志日志
sudo systemctl status kafka将收到如下输出
Output● kafka.serviceLoaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor presetActive: active (running) since Wed 2023-02-01 23:44:12 UTC; 4s agoMain PID: 17770 (sh)Tasks: 69 (limit: 4677)Memory: 321.9MCGroup: /system.slice/kafka.service├─17770 /bin/sh -c /home/kafka/kafka/bin/kafka-server-start.sh /ho└─17793 java -Xmx1G -Xms1G -server -XX:UseG1GC -XX:MaxGCPauseMill现在有一个 Kafka 服务器正在侦听端口9092这是 Kafka 服务器使用的默认端口。
现在已启动该kafka服务。但是如果要重新启动服务器Kafka将不会自动重新启动。要在服务器启动时启用该kafka服务请运行以下命令
sudo systemctl enable zookeeper将收到已创建符号链接的响应
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /etc/systemd/system/zookeeper.service.然后运行这个命令
sudo systemctl enable kafka将收到已创建符号链接的响应
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/kafka.service → /etc/systemd/system/kafka.service.在此步骤中我们启动并启用了kafka和zookeeper服务。在下一步中将检查 Kafka 安装。
第 5 步 — 测试 Kafka 安装
在此步骤中将测试 Kafka 安装。我们将发布并使用一条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 服务器的主机名、端口和主题作为参数。
将收到主题已创建的响应
OutputCreated topic TutorialTopic.现在将字符串发布Hello, World到TutorialTopic主题
echo Hello, World | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic /dev/null接下来使用该脚本创建一个 Kafka 消费者kafka-console-consumer.sh。它需要 ZooKeeper 服务器的主机名和端口以及主题名称作为参数。以下命令使用来自TutorialTopic 的消息。请注意该标志的使用--from-beginning它允许消费在消费者启动之前发布的消息
~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning如果没有配置问题将Hello, World在终端中收到响应
OutputHello, World该脚本将继续运行等待更多消息发布。要对此进行测试请打开一个新的终端窗口并登录到您的服务器。请记住以你的用户身份登录kafka
su -l kafka在这个新终端中启动生产者来发布第二条消息
echo Hello World from Sammy at DigitalOcean! | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic /dev/null此消息将加载到原始终端中消费者的输出中
OutputHello, World
Hello World from Sammy at DigitalOcean!完成测试后按CTRLC停止原始终端中的消费者脚本。
到此现在已经在 Ubuntu 20.04 上安装并配置了 Kafka 服务器。在下一步中我们将执行一些快速任务来强化 Kafka 服务器的安全性。
第 6 步 — 强化 Kafka 服务器
安装完成后可以删除kafka用户的管理权限并强化 Kafka 服务器。
执行此操作之前请注销并以任何其他非 rootsudo用户身份重新登录。如果仍在运行开始本教程时使用的同一个 shell 会话请输入exit。
从 sudo 组中删除用户kafka
sudo deluser kafka sudo为了进一步提高 Kafka 服务器的安全性请使用该命令锁定用户的密码passwd。此操作可确保任何人都无法使用此帐户直接登录服务器
sudo passwd kafka -l该-l标志锁定更改用户密码的命令 ( passwd)。
此时只有一个root或一个用户可以使用以下命令sudo登录
sudo su - kafka将来如果想解锁更改密码的功能请使用passwd下的-u选项
sudo passwd kafka -u现在已成功限制kafka用户的管理员权限。现在可以选择执行下一步这会将 Kafka 添加到你的系统中。
第 7 步 — 安装 KafkaT可选
开发KafkaT 的目的是提高查看 Kafka 集群详细信息以及从命令行执行某些管理任务的能力。需要 Ruby 才能使用它。还需要build-essential包来构建其它所需依赖。
build-essential使用以下命令安装 Ruby 和软件包
sudo apt install ruby ruby-dev build-essential现在可以使用以下命令安装 KafkaT
sudo CFLAGS-Wno-errorformat-overflow gem install kafkatWno-errorformat-overflow需要编译标志来抑制 Zookeeper 在安装过程中的警告和错误。
安装完成后将收到安装完成的响应
Output...
Done installing documentation for json, colored, retryable, highline, trollop, zookeeper, zk, kafkat after 3 seconds
8 gems installedKafkaT用作.kafkatcfg配置文件来确定Kafka服务器的安装和日志目录。它还应该有一个将 KafkaT 指向我们的 ZooKeeper 实例的条目。
创建一个名为的新文件.kafkatcfg
nano ~/.kafkatcfg添加以下行以指定有关 Kafka 服务器和 Zookeeper 实例的所需信息
〜/.kafkatcfg
{kafka_path: ~/kafka,log_path: /home/kafka/logs,zk_path: localhost:2181
}保存并关闭文件。
要查看有关所有 Kafka 分区的详细信息请尝试运行以下命令
kafkat partitions将收到以下输出
Output[DEPRECATION] The trollop gem has been renamed to optimist and will no longer be supported. Please switch to optimist as soon as possible.
/var/lib/gems/2.7.0/gems/json-1.8.6/lib/json/common.rb:155: warning: Using the last argument as keyword parameters is deprecated
...
Topic Partition Leader Replicas ISRs
TutorialTopic 0 0 [0] [0]
__consumer_offsets 0 0 [0] [0]
...
...输出将包括TutorialTopic和__consumer_offsets这是 Kafka 用于存储客户端相关信息的内部主题。可以安全地忽略以 __consumer_offsets开头的行。
要了解有关 KafkaT 的更多信息请参阅其GitHub 存储库。
结论
现在Apache Kafka 在 Ubuntu 服务器上安全运行。