Linux - Kafka

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 内部选举端口

对外只需开放 90929093 仅内部使用。


九、注意事项

  • Topic 命名建议使用中划线(order-create-topic),避免混用点和下划线
  • 单节点 replication-factor 只能设为 1
  • 数据默认保留 168 小时(7天),按需调整 log.retention.hours
  • Kafka 4.x 已移除 ZooKeeper,使用 KRaft 模式,--standalone 参数用于单节点初始化
  • 生产环境建议配置 SASL/PLAIN 认证
相关推荐
青云计划1 小时前
Kafka消息可靠性:从生产到消费的全链路不丢不重
kafka
zzzsde2 小时前
【Linux网络】传输层协议UDP
linux·服务器·开发语言·网络·算法·udp
至此流年莫相忘2 小时前
CentOS 部署 Hadoop 环境指导文档
linux·hadoop·centos
Mr.Daozhi2 小时前
用 WSL/Ubuntu 在本地部署开源大模型,彻底解决英文文献阅读难题
linux·运维·ubuntu
三金121382 小时前
【无标题】
linux·运维·服务器
Devin~Y2 小时前
大厂 Java 面试实录:Spring Boot微服务/Kafka/Redis/K8s可观测性 + RAG Agent(小Y社死版)
java·spring boot·redis·spring cloud·kafka·kubernetes·micrometer
yumgpkpm2 小时前
Hadoop(CDH6、CDP7)在Qwen3.7大模型训练中的作用,(含部署、运行操作步骤)
大数据·hive·hadoop·分布式·zookeeper·spark·kafka
handler012 小时前
【MySQL】常用约束语法总结
linux·运维·数据库·笔记·mysql
Shingmc32 小时前
Reactor反应堆模式
linux·网络