如何在Ubuntu14.04上安装ApacheKafka

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

在本教程中,您将学习如何在 Ubuntu 14.04 上安装和使用 Apache Kafka 0.8.2.1。

先决条件

要继续进行,您将需要:

第 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 的更多信息,请查看其 文档