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 认证
相关推荐
IsJunJianXin8 小时前
pdd小程序 cdp 保存响应体
linux·服务器·小程序·pdd小程序·拼多多响应体解密·小程序cdp·拼多多rpc取响应体
爱就是恒久忍耐8 小时前
现代CMake的build方式
linux·运维·服务器
古城小栈9 小时前
Python 的主流Ai框架为什么优先适配 Linux 系统?
linux·人工智能·python
whaledown10 小时前
Kafka 与 Java 消息队列入门:用订单场景理解核心机制
java·kafka·消息队列·springboot
aFakeProgramer10 小时前
S-CORE Docker 环境
linux
error:(10 小时前
Ubuntu 22.04 GNOME远程桌面配置问题排查与解决全流程
linux·运维·ubuntu
wcy1008610 小时前
为 CentOS 7.6 (7.6.1810) 配置阿里云 Vault 源
linux·阿里云·centos
江华森11 小时前
Linux 运维新手入门课
linux·运维·服务器
载数而行52011 小时前
Linux 9 服务管理(进程的一种)
linux
追梦的小菜11 小时前
linux 下磁盘挂载
linux