Apache Kafka 是一个分布式的事件流处理平台,每天可以处理数万亿个事件。传统上,Kafka 需要使用 Zookeeper 来管理其分布式系统,但从版本 2.8 开始,Kafka 引入了一种名为 KRaft (Kafka Raft) 的新模式,这使得 Kafka 可以在没有 Zookeeper 的情况下运行,从而简化了安装和管理过程。本指南将详细介绍如何在 KRaft 模式下安装和配置 Kafka 3.6.0 版本。
简介
Apache Kafka 是一种用于构建实时流数据管道和应用程序的分布式事件流平台。随着 KRaft 模式的引入,Kafka 现在可以作为一个独立的系统运行,而不需要 Zookeeper。本指南涵盖了在 Linux 系统上安装和配置 Kafka 3.6.0 版本的各个步骤,从下载软件到启动和管理 Kafka。
下载 Kafka
访问 Apache Kafka 官方下载页面 下载 Kafka 二进制文件。本指南使用的是 Scala 2.12 版本的 Kafka 3.6.0。
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.12-3.6.0.tgz
创建 Kafka 目录
创建 Kafka 安装和运行所需的目录。这有助于组织 Kafka 的二进制文件和配置文件。
mkdir -p /usr/local/kafka/kafka_2.12-3.6.0
上传和解压 Kafka
下载 Kafka 压缩包后,将其上传到服务器并解压到之前创建的目录中。
tar -zxvf kafka_2.12-3.6.0.tgz -C /usr/local/kafka/
生成 UUID
Kafka 需要一个唯一标识符(UUID)来进行存储管理。使用 kafka-storage.sh
脚本生成这个 UUID。
sh /usr/local/kafka/kafka_2.12-3.6.0/bin/kafka-storage.sh random-uuid
输出示例:
[root@localhost bin]# sh /usr/local/kafka/kafka_2.12-3.6.0/bin/kafka-storage.sh random-uuid
C4mOgAy4TouDNwkz_35D0A
[root@localhost bin]#
格式化存储目录
使用生成的 UUID 格式化存储目录。这一步初始化 Kafka brokers 的日志目录。
sh /usr/local/kafka/kafka_2.12-3.6.0/bin/kafka-storage.sh format -t C4mOgAy4TouDNwkz_35D0A -c /usr/local/kafka/kafka_2.12-3.6.0/config/kraft/server.properties
输出示例:
[root@localhost kraft]# sh /usr/local/kafka/kafka_2.12-3.6.0/bin/kafka-storage.sh format -t C4mOgAy4TouDNwkz_35D0A -c /usr/local/kafka/kafka_2.12-3.6.0/config/kraft/server.properties
Formatting /tmp/kraft-combined-logs with metadata.version 3.6-IV2.
[root@localhost kraft]#
后台启动 Kafka
使用 kafka-server-start.sh
脚本和 -daemon
选项将 Kafka 作为后台进程运行。
sh /usr/local/kafka/kafka_2.12-3.6.0/bin/kafka-server-start.sh -daemon /usr/local/kafka/kafka_2.12-3.6.0/config/kraft/server.properties &
查看启动日志
为了确保 Kafka 正常启动,可以查看服务器的日志文件。
tail -f /usr/local/kafka/kafka_2.12-3.6.0/logs/server.log
这个日志文件将提供 Kafka 服务器状态和启动过程中出现的任何问题的详细信息。
停止 Kafka
要停止 Kafka 服务器,可以使用 kafka-server-stop.sh
脚本。
sh /usr/local/kafka/kafka_2.12-3.6.0/bin/kafka-server-stop.sh
附加配置
Kafka 提供了众多配置选项来优化其性能和行为。以下是一些关键配置,您可能需要根据自己的需求进行调整:
- Broker 配置 (
server.properties
):log.dirs
: Kafka 存储日志文件的目录。num.partitions
: 每个主题的默认分区数。auto.create.topics.enable
: Kafka 是否应在首次引用时自动创建主题。
- Producer 配置 (
producer.properties
):acks
: Producer 要求领导者在认为请求完成之前接收的确认数。compression.type
: Producer 生成的所有数据的压缩类型。
- Consumer 配置 (
consumer.properties
):group.id
: 标识此消费者所属消费者组的唯一字符串。auto.offset.reset
: 当没有初始偏移量或当前偏移量在服务器上不存在时该如何处理。
示例 server.properties
broker.id=0
log.dirs=/usr/local/kafka/kafka_2.12-3.6.0/logs
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
示例 producer.properties
bootstrap.servers=localhost:9092
acks=all
retries=0
batch.size=16384
linger.ms=1
buffer.memory=33554432
key.serializer=org.apache.kafka.common.serialization.StringSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer
示例 consumer.properties
bootstrap.servers=localhost:9092
group.id=test
enable.auto.commit=true
auto.commit.interval.ms=1000
key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
故障排除和提示
- 常见问题:
- 端口冲突:确保 Kafka 配置使用的端口(默认是 9092)未被其他应用程序占用。
- 内存使用:Kafka 可能占用大量内存,确保系统有足够的 RAM 并监控 Kafka 的内存使用情况。
- 日志分析:
- 定期检查位于
/usr/local/kafka/kafka_2.12-3.6.0/logs
的 Kafka 日志,查找任何错误或警告。
- 定期检查位于
- 性能调优:
- 根据使用情况调整分区数。更多分区可以提高吞吐量,但也会增加复杂性。
- 安全性:
- 考虑启用 SSL 加密和 SASL 认证来保护您的 Kafka 集群。
总结
在没有 Zookeeper 的情况下安装和配置 Kafka 变得更加简单,特别是对于较小的环境或开发环境。通过本指南,您应该能够在 KRaft 模式下运行功能齐全的 Kafka 实例,以满足您的事件流处理需求。有关更多高级配置和优化,请参阅 官方 Kafka 文档。
本指南提供了安装和配置 Kafka 的全面概述。在使用 Kafka 的过程中,您会发现更多可以根据具体需求进行调整的功能和特性。祝您流处理愉快!