在 Ubuntu 下配置 Apache Kafka,一般分为以下几个步骤:安装、配置、启动、验证。下面以 Kafka 3.x + Ubuntu 22.04 为例,给出一套清晰、常用的配置流程。
Kafka 依赖 Java(推荐 JDK 8 / 11 / 17)
sudo apt update
sudo apt install openjdk-17-jdk -y
验证:
java -version
前往官网获取最新版本: https://kafka.apache.org/downloads
cd /opt
sudo wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
sudo tar -xzf kafka_2.13-3.6.1.tgz
sudo mv kafka_2.13-3.6.1 kafka
/opt/kafka/
├── bin/ # 启动脚本
├── config/ # 配置文件
├── logs/ # 日志
└── libs/
Kafka 依赖 ZooKeeper(新版本也可用 KRaft,后面说明)
编辑配置:
sudo vim /opt/kafka/config/zookeeper.properties
常见配置:
dataDir=/opt/kafka/zookeeper-data
clientPort=2181
maxClientCnxns=0
编辑 Kafka 配置:
sudo vim /opt/kafka/config/server.properties
关键配置项:
broker.id=0
listeners=PLAINTEXT://localhost:9092
log.dirs=/opt/kafka/kafka-logs
zookeeper.connect=localhost:2181
num.partitions=3
说明:
broker.id:集群中唯一listeners:客户端连接地址log.dirs:消息存储目录zookeeper.connect:ZooKeeper 地址cd /opt/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties
后台运行:
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
后台运行:
bin/kafka-server-start.sh -daemon config/server.properties
jps
应看到:
QuorumPeerMain
Kafka
bin/kafka-topics.sh --create \
--topic test-topic \
--bootstrap-server localhost:9092 \
--partitions 3 \
--replication-factor 1
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
发送:
bin/kafka-console-producer.sh \
--topic test-topic \
--bootstrap-server localhost:9092
消费:
bin/kafka-console-consumer.sh \
--topic test-topic \
--from-beginning \
--bootstrap-server localhost:9092
Kafka 3.x 支持 KRaft(生产可用)
KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
bin/kafka-storage.sh format \
-t $KAFKA_CLUSTER_ID \
-c config/kraft/server.properties
vim config/kraft/server.properties
关键配置:
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:9093
listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
log.dirs=/opt/kafka/kafka-logs
bin/kafka-server-start.sh config/kraft/server.properties
num.network.threads=8
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
log.retention.hours=168
log.segment.bytes=1073741824
netstat -tulnp | grep 9092
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
每个节点
broker.id必须唯一
如果你愿意,我可以:
你打算用在 生产 还是 本地开发?