简介
Apache Kafka 是一个流行的分布式消息代理,旨在高效处理大量实时数据。Kafka 集群不仅高度可扩展和容错,而且与其他消息代理(如 ActiveMQ 和 RabbitMQ)相比,吞吐量也更高。虽然它通常用作发布/订阅消息系统,但许多组织也将其用于日志聚合,因为它为发布的消息提供了持久存储。
在本教程中,您将学习如何在 Ubuntu 14.04 上安装和使用 Apache Kafka 0.8.2.1。
先决条件
要跟随本教程,您需要:
- Ubuntu 14.04 Droplet
- 至少 4GB 的交换空间
步骤 1 —— 为 Kafka 创建用户
由于 Kafka 可以通过网络处理请求,因此您应该为其创建一个专用用户。这样可以最大程度地减少 Kafka 服务器受损对 Ubuntu 机器造成的影响。
以 root 身份使用 useradd
命令创建一个名为 kafka 的用户:
useradd kafka -m
使用 passwd
设置其密码:
passwd kafka
将其添加到 sudo
组,以便具有安装 Kafka 依赖项所需的特权。可以使用 adduser
命令完成此操作:
adduser kafka sudo
现在您的 Kafka 用户已准备就绪。使用 su
登录:
su - kafka
步骤 2 —— 安装 Java
在安装其他软件包之前,更新可用软件包的列表,以便安装存储库中提供的最新版本:
sudo apt-get update
由于 Apache Kafka 需要 Java 运行时环境,使用 apt-get
安装 default-jre
软件包:
sudo apt-get install default-jre
步骤 3 —— 安装 ZooKeeper
Apache ZooKeeper 是一个开源服务,用于协调和同步属于分布式系统的节点的配置信息。Kafka 集群依赖于 ZooKeeper 执行诸如检测失败节点和选举领导者等操作。
由于 ZooKeeper 软件包在 Ubuntu 的默认存储库中可用,因此可以使用 apt-get
安装它。
sudo apt-get install zookeeperd
安装完成后,ZooKeeper 将自动作为守护进程启动。默认情况下,它将侦听端口 2181。
为确保它正在工作,通过 Telnet 连接到它:
telnet localhost 2181
在 Telnet 提示符下,输入 ruok
并按 ENTER
。
如果一切正常,ZooKeeper 将回复 imok
并结束 Telnet 会话。
步骤 4 —— 下载并提取 Kafka 二进制文件
现在 Java 和 ZooKeeper 已安装,是时候下载并提取 Kafka 了。
首先,创建一个名为 Downloads
的目录,用于存储所有下载内容。
mkdir -p ~/Downloads
使用 wget
下载 Kafka 二进制文件。
wget "http://mirror.cc.columbia.edu/pub/software/apache/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz" -O ~/Downloads/kafka.tgz
创建一个名为 kafka
的目录并切换到该目录。这将是 Kafka 安装的基本目录。
mkdir -p ~/kafka && cd ~/kafka
使用 tar
命令提取您下载的存档。
tar -xvzf ~/Downloads/kafka.tgz --strip 1
步骤 5 —— 配置 Kafka 服务器
下一步是配置 Kafka 服务器。
使用 vi
打开 server.properties
:
vi ~/kafka/config/server.properties
默认情况下,Kafka 不允许您删除主题。为了能够删除主题,请在文件末尾添加以下行:
delete.topic.enable = true
保存文件并退出 vi
。
步骤 6 —— 启动 Kafka 服务器
使用 nohup
运行 kafka-server-start.sh
脚本,以将 Kafka 服务器(也称为 Kafka broker)作为独立于您的 shell 会话的后台进程启动。
nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &
等待几秒钟让它启动。当您在 ~/kafka/kafka.log
中看到以下消息时,可以确定服务器已成功启动:
... [2015-07-29 06:02:41,736] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener) [2015-07-29 06:02:41,776] INFO [Kafka Server 0], started (kafka.server.KafkaServer)
现在您有一个监听端口 9092 的 Kafka 服务器。
步骤 7 — 测试安装
现在让我们发布和消费一个**“Hello World”**消息,以确保 Kafka 服务器的行为是否正确。
要发布消息,您应该创建一个 Kafka 生产者。您可以使用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 将自动创建它。
要消费消息,您可以使用kafka-console-consumer.sh
脚本创建一个 Kafka 消费者。它需要 ZooKeeper 服务器的主机名和端口,以及一个主题名称作为参数。
以下命令从我们发布的主题中消费消息。请注意使用--from-beginning
标志,因为我们希望消费在消费者启动之前发布的消息。
~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning
如果没有配置问题,您现在应该在输出中看到Hello, World
。
该脚本将继续运行,等待更多消息被发布到主题。随时打开一个新的终端并启动一个生产者来发布更多消息。您应该能够立即在消费者的输出中看到它们。
测试完成后,按下CTRL+C
停止消费者脚本。
步骤 8 — 安装 KafkaT(可选)
KafkaT 是来自 Airbnb 的一个方便的小工具,它使您可以更轻松地查看 Kafka 集群的详细信息,并且还可以从命令行执行一些管理任务。由于它是一个 Ruby gem,您需要安装 Ruby 才能使用它。您还需要安装build-essential
软件包以便能够构建它所依赖的其他 gem。使用apt-get
安装它们:
sudo apt-get install ruby ruby-dev build-essential
现在可以使用gem
命令安装 KafkaT:
sudo gem install kafkat --source https://rubygems.org --no-ri --no-rdoc
使用vi
创建一个名为.kafkatcfg
的新文件。
vi ~/.kafkatcfg
这是 KafkaT 使用的配置文件,用于确定您的 Kafka 服务器的安装和日志目录。它还应该将 KafkaT 指向您的 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]
要了解更多关于 KafkaT 的信息,请参阅其 GitHub 仓库。
步骤 9 — 设置多节点集群(可选)
如果您想要使用更多的 Ubuntu 14.04 机器创建一个多代理集群,您应该在每台新机器上重复执行步骤 1、步骤 3、步骤 4 和步骤 5。此外,您还应该在每台机器的server.properties
文件中进行以下更改:
broker.id
属性的值应更改为在整个集群中是唯一的zookeeper.connect
属性的值应更改为所有节点指向同一个 ZooKeeper 实例
如果您想要为您的集群拥有多个 ZooKeeper 实例,每个节点上zookeeper.connect
属性的值应该是一个相同的、逗号分隔的字符串,列出所有 ZooKeeper 实例的 IP 地址和端口号。
步骤 10 — 限制 Kafka 用户
现在所有安装都已完成,您可以删除kafka
用户的管理员特权。在这样做之前,请注销并以任何其他非根 sudo 用户重新登录。如果您仍在运行开始本教程的同一个 shell 会话,只需输入exit
。
要删除kafka
用户的管理员特权,请将其从sudo
组中删除。
sudo deluser kafka sudo
为了进一步提高 Kafka 服务器的安全性,使用passwd
命令锁定kafka
用户的密码。这样可以确保没有人可以直接登录。
sudo passwd kafka -l
此时,只有 root 用户或一个 sudo 用户可以通过输入以下命令作为kafka
用户登录:
sudo su - kafka
将来,如果您想要解锁它,可以使用带有-u
选项的passwd
:
sudo passwd kafka -u
结论
您现在在您的Ubuntu服务器上拥有一个安全的Apache Kafka。您可以通过使用几乎所有编程语言都可用的Kafka客户端,轻松地在您的项目中利用它,创建Kafka生产者和消费者。要了解更多关于Kafka的信息,请阅读其文档。