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 认证
相关推荐
张洛闻Eren5 分钟前
MySQL 维护稳定系统【MySQL第二课】
linux·数据库·mysql·云原生
ltl27 分钟前
Linux 异步 I/O:epoll 与 io_uring 对比
linux
ltl34 分钟前
压缩算法工程实践:吞吐、比率与 CPU 权衡
linux
fiveym1 小时前
01 - iPXE + Clonezilla 网络装机原理解析
linux·运维·服务器·网络
-今昭-3 小时前
Ansible
linux·运维·ansible
mounter6254 小时前
MACsec 全景解析:从技术演进、核心架构到 DPU 硬件卸载与 K8s 大规模调度实战
linux·kubernetes·linux kernel·kernel·macsec
IT邦德5 小时前
Dify1.6基于ubuntu系统的部署实战
linux·运维·ubuntu
吠品6 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器
木白CPP7 小时前
Linux 驱动UART子系统源码分析
linux·运维·服务器·驱动开发·嵌入式硬件·开源软件
RisunJan7 小时前
Linux命令-times(进程累计时间显示)
linux·运维·chrome