Apache Kafka是一种流行的分布式消息代理,旨在有效处理大量实时数据。在本教程中,您将在Debian 9上安装和使用Apache Kafka。

作者选择了自由和开源基金作为Write for DOnations计划的一部分进行捐赠。

介绍

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

发布/订阅消息传递系统允许一个或多个生成器发布消息,而不考虑消费者的数量或他们将如何处理消息。 将自动通知订阅的客户端有关更新和新消息的创建。 与客户端定期轮询以确定新消息是否可用的系统相比,该系统更高效且可扩展。

在本教程中,您将在Debian 9上安装和使用Apache Kafka 1.1.1。

先决条件

要继续,您将需要:

  • 一个Debian 9服务器和一个具有sudo权限的非root用户。 如果您没有设置非root用户,请按照本指南中指定的步骤操作。
  • 服务器上至少有4GB的RAM。 没有这么多RAM的安装可能会导致Kafka服务失败, Java虚拟机(JVM)在启动期间抛出“Out Of Memory”异常。
  • OpenJDK 8安装在您的服务器上。 要安装此版本,请按照这些说明安装特定版本的OpenJDK。 Kafka是用Java编写的,所以它需要一个JVM; 但是,它的启动shell脚本有一个版本检测错误,导致它无法启动8以上的JVM版本。

第1步 – 为Kafka创建用户

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

以非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二进制文件

https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-7163569408396951&output=html&h=182&slotname=7452267897&adk=314624303&adf=331369438&pi=t.ma~as.7452267897&w=728&fwrn=4&lmt=1620976319&rafmt=11&psa=1&format=728×182&url=https%3A%2F%2Fwww.howtoing.com%2Fhow-to-install-apache-kafka-on-debian-9&flash=0&wgl=1&dt=1620976318979&bpp=16&bdt=497&idt=66&shv=r20210511&cbv=%2Fr20190131&ptt=9&saldr=aa&abxe=1&cookie=ID%3D48527fd304079bb0-22092b2c25c80005%3AT%3D1620976314%3ART%3D1620976314%3AS%3DALNI_Mb-NttFUDu89qowb358-mBugn_bfg&correlator=4005534740767&frm=20&pv=2&ga_vid=835390221.1620976319&ga_sid=1620976319&ga_hid=1902469506&ga_fc=0&rplot=4&u_tz=480&u_his=9&u_java=0&u_h=1080&u_w=1920&u_ah=1040&u_aw=1920&u_cd=24&u_nplug=0&u_nmime=0&adx=428&ady=1972&biw=1903&bih=938&scr_x=0&scr_y=0&oid=3&pvsid=4464633753090611&pem=659&ref=http%3A%2F%2Flink.putaoduo.com%2F&eae=0&fc=896&brdim=-8%2C-8%2C-8%2C-8%2C1920%2C0%2C1936%2C1056%2C1920%2C938&vis=1&rsz=d%7C%7CeEbr%7C&abl=CS&pfx=0&fu=128&bc=31&ifi=1&uci=a!1&btvi=1&fsb=1&xpc=9xGXlI1OqQ&p=https%3A//www.howtoing.com&dtd=179

让我们将kafka二进制文件下载并解压缩到我们kafka用户主目录中的专用文件夹中。

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

mkdir ~/Downloads

使用apt-get安装curl以便您能够下载远程文件:

sudo apt-get update && sudo apt-get install -y curl

安装curl ,使用它来下载Kafka二进制文件:

curl "http://www-eu.apache.org/dist/kafka/1.1.1/kafka_2.12-1.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.12-1.1.1 / )中~/kafka/kafka_ 2.12-1.1.1 /

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

第3步 – 配置Kafka服务器

Kafka的默认行为将不允许我们删除可以发布消息的主题 ,类别,组或订阅源名称。 要修改它,让我们编辑配置文件。

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

nano ~/kafka/config/server.properties

让我们添加一个允许我们删除Kafka主题的设置。 将以下内容添加到文件的底部: 〜/Kafka/配置/ server.properties

delete.topic.enable = true

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

第4步 – 创建系统单元文件并启动Kafka服务器

https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-7163569408396951&output=html&h=182&slotname=7452267897&adk=314624303&adf=3526007643&pi=t.ma~as.7452267897&w=728&fwrn=4&lmt=1620976319&rafmt=11&psa=1&format=728×182&url=https%3A%2F%2Fwww.howtoing.com%2Fhow-to-install-apache-kafka-on-debian-9&flash=0&wgl=1&dt=1620976318979&bpp=4&bdt=498&idt=79&shv=r20210511&cbv=%2Fr20190131&ptt=9&saldr=aa&abxe=1&cookie=ID%3D48527fd304079bb0-22092b2c25c80005%3AT%3D1620976314%3ART%3D1620976314%3AS%3DALNI_Mb-NttFUDu89qowb358-mBugn_bfg&prev_fmts=728×182&correlator=4005534740767&frm=20&pv=1&ga_vid=835390221.1620976319&ga_sid=1620976319&ga_hid=1902469506&ga_fc=0&rplot=4&u_tz=480&u_his=9&u_java=0&u_h=1080&u_w=1920&u_ah=1040&u_aw=1920&u_cd=24&u_nplug=0&u_nmime=0&adx=428&ady=3260&biw=1903&bih=938&scr_x=0&scr_y=0&oid=3&pvsid=4464633753090611&pem=659&ref=http%3A%2F%2Flink.putaoduo.com%2F&eae=0&fc=896&brdim=-8%2C-8%2C-8%2C-8%2C1920%2C0%2C1936%2C1056%2C1920%2C938&vis=1&rsz=d%7C%7CeEbr%7C&abl=CS&pfx=0&fu=128&bc=31&ifi=2&uci=a!2&btvi=2&fsb=1&xpc=7S5HNZaHtm&p=https%3A//www.howtoing.com&dtd=185

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

ZooKeeper是Kafka用于管理其集群状态和配置的服务。 它通常在许多分布式系统中用作不可或缺的组件。 如果您想了解更多信息,请访问官方的ZooKeeper文档

zookeeper创建单元文件:

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

在文件中输入以下单位定义: /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

在文件中输入以下单位定义: /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

您应该看到类似于以下内容的输出:





Mar 23 13:31:48 kafka systemd[1]: Started kafka.service.

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

虽然我们已经启动了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(可选)

https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-7163569408396951&output=html&h=182&slotname=7452267897&adk=314624303&adf=170399143&pi=t.ma~as.7452267897&w=728&fwrn=4&lmt=1620976424&rafmt=11&psa=1&format=728×182&url=https%3A%2F%2Fwww.howtoing.com%2Fhow-to-install-apache-kafka-on-debian-9&flash=0&wgl=1&dt=1620976318963&bpp=3&bdt=482&idt=98&shv=r20210511&cbv=%2Fr20190131&ptt=9&saldr=aa&abxe=1&cookie=ID%3D48527fd304079bb0-22092b2c25c80005%3AT%3D1620976314%3ART%3D1620976314%3AS%3DALNI_Mb-NttFUDu89qowb358-mBugn_bfg&prev_fmts=728×182%2C728x182%2C300x600%2C1200x280%2C0x0%2C300x600&nras=3&correlator=4005534740767&frm=20&pv=1&ga_vid=835390221.1620976319&ga_sid=1620976319&ga_hid=1902469506&ga_fc=0&rplot=4&u_tz=480&u_his=9&u_java=0&u_h=1080&u_w=1920&u_ah=1040&u_aw=1920&u_cd=24&u_nplug=0&u_nmime=0&adx=428&ady=5771&biw=1903&bih=938&scr_x=0&scr_y=2410&oid=3&pvsid=4464633753090611&pem=659&ref=http%3A%2F%2Flink.putaoduo.com%2F&eae=0&fc=896&brdim=-8%2C-8%2C-8%2C-8%2C1920%2C0%2C1936%2C1056%2C1920%2C938&vis=1&rsz=d%7C%7CeEbr%7C&abl=CS&pfx=0&fu=128&bc=31&ifi=3&uci=a!3&btvi=5&fsb=1&xpc=X1D7mT49f0&p=https%3A//www.howtoing.com&dtd=M

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服务器的安装和日志目录。 它还应该有一个条目将KafkaT指向您的ZooKeeper实例。

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

nano ~/.kafkatcfg

添加以下行以指定有关Kafka服务器和Zookeeper实例的必需信息: 〜/ .kafkatcfg

{
  "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开头的__consumer_offsets

要了解有关KafkaT的更多信息,请参阅其GitHub存储库

第7步 – 设置多节点群集(可选)

如果要使用更多Debian 9计算机创建多代理群集,则应在每台新计算机上重复第1步,第4步和第5步。 此外,您应该在server.properties文件中为每个进行以下更改:

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

如果要为群集设置多个ZooKeeper实例,则每个节点上zookeeper.connect属性的值应该是一个相同的逗号分隔字符串,其中列出了所有ZooKeeper实例的IP地址和端口号。

第8步 – 限制Kafka用户

https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-7163569408396951&output=html&h=182&slotname=7452267897&adk=314624303&adf=530343939&pi=t.ma~as.7452267897&w=728&fwrn=4&lmt=1620976425&rafmt=11&psa=1&format=728×182&url=https%3A%2F%2Fwww.howtoing.com%2Fhow-to-install-apache-kafka-on-debian-9&flash=0&wgl=1&dt=1620976318966&bpp=1&bdt=485&idt=96&shv=r20210511&cbv=%2Fr20190131&ptt=9&saldr=aa&abxe=1&cookie=ID%3D48527fd304079bb0-22092b2c25c80005%3AT%3D1620976314%3ART%3D1620976314%3AS%3DALNI_Mb-NttFUDu89qowb358-mBugn_bfg&prev_fmts=728×182%2C728x182%2C300x600%2C1200x280%2C0x0%2C300x600%2C728x182&nras=3&correlator=4005534740767&frm=20&pv=1&ga_vid=835390221.1620976319&ga_sid=1620976319&ga_hid=1902469506&ga_fc=0&rplot=4&u_tz=480&u_his=9&u_java=0&u_h=1080&u_w=1920&u_ah=1040&u_aw=1920&u_cd=24&u_nplug=0&u_nmime=0&adx=428&ady=7137&biw=1903&bih=938&scr_x=0&scr_y=3588&oid=3&pvsid=4464633753090611&pem=659&ref=http%3A%2F%2Flink.putaoduo.com%2F&eae=0&fc=896&brdim=-8%2C-8%2C-8%2C-8%2C1920%2C0%2C1936%2C1056%2C1920%2C938&vis=1&rsz=d%7C%7CeEbr%7C&abl=CS&pfx=0&fu=128&bc=31&ifi=4&uci=a!4&btvi=6&fsb=1&xpc=742j1SQH1c&p=https%3A//www.howtoing.com&dtd=M

现在所有安装都已完成,您可以删除kafka用户的管理员权限。 在执行此操作之前,请注销并以任何其他非root sudo用户身份重新登录。 如果您仍在运行相同的shell会话,那么只需键入exit即可启动本教程。

从sudo组中删除kafka用户:

sudo deluser kafka sudo

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

sudo passwd kafka -l

此时,只有root或sudo用户可以通过键入以下命令以kafka身份登录:

sudo su - kafka

将来,如果要解锁它,请使用带-u选项的passwd

sudo passwd kafka -u

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

结论

您现在可以在Debian服务器上安全地运行Apache Kafka。 您可以使用Kafka客户端 (可用于大多数编程语言)创建Kafka生产者和使用者,从而在项目中使用它。 要了解有关Kafka的更多信息,您还可以查阅其文档

https://www.howtoing.com/how-to-install-apache-kafka-on-debian-9

发表回复

您的电子邮箱地址不会被公开。