Linux - Kafka
环境:CentOS 7.9 / WSL2,Kafka 4.x,KRaft 模式(无需 ZooKeeper)
一、前置依赖
1.1 安装 JDK 17
bash
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
mv /usr/local/jdk-17* /usr/local/jdk17
cat >> /etc/profile << 'EOF'
export JAVA_HOME=/usr/local/jdk17
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile
java -version
二、下载 Kafka
bash
wget https://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz
tar -zxvf kafka_2.13-4.0.0.tgz -C /usr/local/
mv /usr/local/kafka_2.13-4.0.0 /usr/local/kafka
cat >> /etc/profile << 'EOF'
export KAFKA_HOME=/usr/local/kafka
export PATH=$KAFKA_HOME/bin:$PATH
EOF
source /etc/profile
三、配置 KRaft 模式(单节点)
bash
vi /usr/local/kafka/config/server.properties
主要配置项说明:
| 配置项 | 说明 |
|---|---|
listeners |
Kafka 绑定监听的网卡和端口,0.0.0.0 表示监听所有网卡 |
advertised.listeners |
对外广播地址,客户端实际连接此地址 |
controller.quorum.bootstrap.servers |
KRaft 模式 Controller 选举地址 |
log.dirs |
消息数据存储目录 |
修改以下内容:
properties
# 节点ID
node.id=1
# 单节点同时充当 broker 和 controller
process.roles=broker,controller
# 监听所有网卡
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
# 对外广播地址(单机用127.0.0.1)
advertised.listeners=PLAINTEXT://127.0.0.1:9092
# Controller 选举地址
controller.quorum.bootstrap.servers=127.0.0.1:9093
# 数据存储目录
log.dirs=/data/kafka/logs
# 单节点副本数设为1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# 数据保留时间(默认7天)
log.retention.hours=168
bash
# 创建数据目录
mkdir -p /data/kafka/logs
四、初始化并启动
bash
# 生成集群ID(只执行一次)
KAFKA_CLUSTER_ID=$(/usr/local/kafka/bin/kafka-storage.sh random-uuid)
echo $KAFKA_CLUSTER_ID
# 格式化存储目录(只执行一次,Kafka 4.x 单节点用 --standalone)
/usr/local/kafka/bin/kafka-storage.sh format \
--standalone \
-t $KAFKA_CLUSTER_ID \
-c /usr/local/kafka/config/server.properties
# 启动
/usr/local/kafka/bin/kafka-server-start.sh \
-daemon /usr/local/kafka/config/server.properties
# 验证进程
sleep 5
jps | grep Kafka
五、配置 Service 管理脚本
bash
cat > /etc/init.d/kafka << 'EOF'
#!/bin/bash
# chkconfig: 2345 90 10
# description: Apache Kafka
KAFKA_HOME=/usr/local/kafka
KAFKA_CONFIG=$KAFKA_HOME/config/server.properties
JAVA_HOME=/usr/local/jdk/jdk
JPS=$JAVA_HOME/bin/jps
export JAVA_HOME
export PATH=$JAVA_HOME/bin:$KAFKA_HOME/bin:$PATH
case "$1" in
start)
echo "Starting Kafka..."
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_CONFIG
sleep 3
pid=$($JPS | grep Kafka | awk '{print $1}')
if [ -n "$pid" ]; then
echo "Kafka started, PID: $pid"
else
echo "Kafka start failed, check logs"
fi
;;
stop)
echo "Stopping Kafka..."
$KAFKA_HOME/bin/kafka-server-stop.sh
sleep 3
echo "Kafka stopped"
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
pid=$($JPS | grep Kafka | awk '{print $1}')
if [ -n "$pid" ]; then
echo "Kafka is running, PID: $pid"
else
echo "Kafka is not running"
fi
;;
*)
echo "Usage: service kafka {start|stop|restart|status}"
exit 1
;;
esac
EOF
chmod +x /etc/init.d/kafka
chkconfig --add kafka
常用命令:
bash
service kafka start
service kafka stop
service kafka restart
service kafka status
六、Topic 管理
bash
# 创建 Topic
/usr/local/kafka/bin/kafka-topics.sh \
--bootstrap-server 127.0.0.1:9092 \
--create \
--topic order-create-topic \
--partitions 3 \
--replication-factor 1
# 查看所有 Topic
/usr/local/kafka/bin/kafka-topics.sh \
--bootstrap-server 127.0.0.1:9092 --list
# 查看 Topic 详情
/usr/local/kafka/bin/kafka-topics.sh \
--bootstrap-server 127.0.0.1:9092 \
--describe --topic order-create-topic
# 删除 Topic
/usr/local/kafka/bin/kafka-topics.sh \
--bootstrap-server 127.0.0.1:9092 \
--delete --topic order-create-topic
七、测试收发消息
终端1 - 生产者:
bash
/usr/local/kafka/bin/kafka-console-producer.sh \
--bootstrap-server 127.0.0.1:9092 \
--topic order-create-topic
出现 > 后输入消息:
>{"order_id":"001","company_id":"company001"}
>{"order_id":"002","company_id":"company002"}
终端2 - 消费者:
bash
/usr/local/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server 127.0.0.1:9092 \
--topic order-create-topic \
--from-beginning
消费者组管理:
bash
# 查看消费者组列表
/usr/local/kafka/bin/kafka-consumer-groups.sh \
--bootstrap-server 127.0.0.1:9092 --list
# 查看消费进度(是否有积压)
/usr/local/kafka/bin/kafka-consumer-groups.sh \
--bootstrap-server 127.0.0.1:9092 \
--describe --group doris_group
八、端口说明
| 端口 | 用途 |
|---|---|
9092 |
客户端连接端口(生产者/消费者) |
9093 |
Controller 内部选举端口 |
对外只需开放
9092,9093仅内部使用。
九、注意事项
- Topic 命名建议使用中划线(
order-create-topic),避免混用点和下划线 - 单节点
replication-factor只能设为1 - 数据默认保留
168小时(7天),按需调整log.retention.hours - Kafka 4.x 已移除 ZooKeeper,使用 KRaft 模式,
--standalone参数用于单节点初始化 - 生产环境建议配置 SASL/PLAIN 认证