如何在Ubuntu14.04上安装ApacheKafka
介绍
Apache Kafka 是一种流行的分布式消息代理,旨在有效地处理大量实时数据。 Kafka 集群不仅具有高度可扩展性和容错性,而且与 ActiveMQ 和 RabbitMQ 等其他消息代理相比,它还具有更高的吞吐量。 尽管它通常用作发布/订阅消息系统,但许多组织也将其用于日志聚合,因为它为发布的消息提供了持久存储。
在本教程中,您将学习如何在 Ubuntu 14.04 上安装和使用 Apache Kafka 0.8.2.1。
先决条件
要继续进行,您将需要:
- Ubuntu 14.04 液滴
- 至少 4GB 的 交换空间
第 1 步 — 为 Kafka 创建用户
由于 Kafka 可以通过网络处理请求,因此您应该为其创建一个专用用户。 如果包含 Kafka 服务器,这可以最大限度地减少对 Ubuntu 机器的损坏。
注意: Apache Kafka设置完成后,建议您创建一个不同的非root用户在此服务器上执行其他任务。
以 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 服务器
下一步是配置 Kakfa 服务器。
使用 vi
打开 server.properties
:
vi ~/kafka/config/server.properties
默认情况下,Kafka 不允许您删除主题。 为了能够删除主题,请在文件末尾添加以下行:
~/kafka/config/server.properties
delete.topic.enable = true
保存文件,退出vi
。
第 6 步 — 启动 Kafka 服务器
使用 nohup
运行 kafka-server-start.sh
脚本以将 Kafka 服务器(也称为 Kafka 代理)作为独立于 shell 会话的后台进程启动。
nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &
等待几秒钟以使其启动。 当您在~/kafka/kafka.log
中看到以下消息时,可以确定服务器已经启动成功:
摘自~/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)
您现在有一个 Kafka 服务器正在侦听端口 9092。
第 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 实例。 因此,向其中添加以下行:
~/.kafkatcfg
{ "kafka_path": "~/kafka", "log_path": "/tmp/kafka-logs", "zk_path": "localhost:2181" }
您现在可以使用 KafkaT。 首先,您可以使用它来查看有关所有 Kafka 分区的详细信息:
kafkat partitions
您应该看到以下输出:
kafkat 分区的输出
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
用户的管理员权限。 在您这样做之前,请注销并以任何其他非 root sudo 用户身份重新登录。 如果您仍在运行本教程开始时使用的同一 shell 会话,只需键入 exit
。
要删除 kafka
用户的管理员权限,请将其从 sudo
组中删除。
sudo deluser kafka sudo
为了进一步提高您的 Kafka 服务器的安全性,请使用 passwd
命令锁定 kafka
用户的密码。 这确保没有人可以直接登录它。
sudo passwd kafka -l
此时,只有 root 或 sudo 用户可以通过键入以下命令以 kafka
身份登录:
sudo su - kafka
以后如果要解锁,请使用 passwd
和 -u
选项:
sudo passwd kafka -u
结论
现在,您的 Ubuntu 服务器上运行了一个安全的 Apache Kafka。 通过使用可用于大多数编程语言的 Kafka 客户端 创建 Kafka 生产者和消费者,您可以轻松地在项目中使用它。 要了解有关 Kafka 的更多信息,请查看其 文档 。