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 认证
相关推荐
云泽808几秒前
Linux 核心机制详解(三):文件系统权限与共享安全——从删除规则到粘滞位防护
linux·运维·安全
码农阿豪3 分钟前
Prometheus怎么监控另一台Linux服务器?Node Exporter配置教程
linux·服务器·prometheus
xywww16833 分钟前
Claude Opus 5 API 接入实战:国内项目上线前的网络、Key、限流和排错清单
大数据·linux·网络·数据库·云计算·aws
ShineWinsu36 分钟前
对于Linux:http的解析
linux·网络·c++·网络协议·http·请求·响应
强里秋千墙外道43 分钟前
Ubuntu 开机 Kernel Panic:HWE 内核升级失败 + NVIDIA DKMS 踩坑实录
linux·运维·ubuntu
coder!mq44 分钟前
什么是泛型?有什么好处?
linux·运维·服务器·面试题·八股文
2023自学中10 小时前
Linux 图形系统
linux
mounter62512 小时前
高性能网络技术演进与创新探索:RDMA、eBPF/XDP 深度解析及 LSF/MM/BPF 2023 专题演讲
linux·ebpf·linux kernel·kernel·rdma·xdp
名字还没想好☜13 小时前
Python itertools 实战:用 groupby、chain、islice 优雅处理大数据流
linux·windows·python·迭代器·itertools
ziguo112215 小时前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio