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 认证
相关推荐
范什么特西7 小时前
网络代理问题
java·linux·服务器
utf8mb4安全女神8 小时前
【Redis数据库】哨兵集群/redis集群/安装配置/主从复制/数据持久化操作/数据结构/安全限制/PHP redis/
linux·服务器·数据结构·数据库·redis·缓存
Zk.Sun8 小时前
Linux设置触屏双击距离容差
linux·运维·数据库
bukeyiwanshui8 小时前
20260622 安装配置ubuntu
linux·运维·ubuntu
lzhcoder8 小时前
Spring Boot 集成 Kafka:先跑通 Demo,再避开那 80% 的人踩过的坑
java·kafka
写代码的学渣8 小时前
Linux 安装 Swap 交换分区大小标准(通用 + 生产服务器 + 个人 PC)
linux·运维·服务器
qq_163135759 小时前
Linux 【03- netstat命令超详细教程】
linux
cjhbachelor9 小时前
线程的控制
linux
写代码的学渣9 小时前
Linux 彻底清空历史命令 & 恢复历史命令(完整版、重启永久生效)
linux·运维·chrome
生万千欢喜心10 小时前
liunx AnolisOS-8.9-x86_64-dvd.iso win11 适配龙蜥 - 虚拟机
linux