Kafka单节点部署与核心操作指南
一、ZooKeeper集成与部署
1.1 架构关系解析
graph TD
ZooKeeper -->|元数据存储| Kafka
Kafka -->|注册信息| ZooKeeper
Producer -->|发布消息| Kafka
Consumer -->|订阅消息| Kafka
style ZooKeeper fill:#4CAF50
1.2 安装与配置
# 下载ZooKeeper 3.8.2
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.2/apache-zookeeper-3.8.2-bin.tar.gz
tar -xzf apache-zookeeper-3.8.2-bin.tar.gz -C /opt
# 初始化配置文件
cd /opt/apache-zookeeper-3.8.2-bin/conf
cp zoo_sample.cfg zoo.cfg
# 修改关键配置
sed -i 's|dataDir=/tmp/zookeeper|dataDir=/var/lib/zookeeper|g' zoo.cfg
echo "admin.serverPort=8080" >> zoo.cfg
# 启动服务
bin/zkServer.sh start
1.3 Kafka集成配置
config/server.properties核心配置:
broker.id=0
listeners=PLAINTEXT://:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=localhost:2181
num.partitions=3
二、Topic管理实战
2.1 Topic生命周期管理
flowchart TD
A[创建Topic] --> B[查看详情]
B --> C[修改配置]
C --> D[删除Topic]
2.2 常用命令示例
# 创建Topic(单副本)
bin/kafka-topics.sh --create \
--bootstrap-server localhost:9092 \
--replication-factor 1 \
--partitions 3 \
--topic test-topic
# 查看Topic列表
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
# 查看Topic详情
bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server localhost:9092
# 删除Topic
bin/kafka-topics.sh --delete --topic test-topic --bootstrap-server localhost:9092
2.3 分区扩容操作
# 修改分区数为5
bin/kafka-topics.sh --alter \
--bootstrap-server localhost:9092 \
--topic test-topic \
--partitions 5
三、生产者与消费者测试
3.1 消息生产消费流程
sequenceDiagram
participant P as Producer
participant K as Kafka
participant C as Consumer
P->>K: 发送消息
K-->>C: 推送消息
C->>K: 提交偏移量
3.2 控制台工具使用
# 启动生产者(新终端)
bin/kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic test-topic \
--property "parse.key=true" \
--property "key.separator=:"
# 启动消费者(新终端)
bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic test-topic \
--from-beginning \
--property "print.key=true"
3.3 Python客户端示例
from kafka import KafkaProducer, KafkaConsumer
# 生产者配置
producer = KafkaProducer(
bootstrap_servers='localhost:9092',
key_serializer=str.encode,
value_serializer=str.encode
)
# 发送消息
producer.send('test-topic', key='key1', value='Hello Kafka')
producer.flush()
# 消费者配置
consumer = KafkaConsumer(
'test-topic',
bootstrap_servers='localhost:9092',
auto_offset_reset='earliest',
group_id='test-group'
)
# 消费消息
for msg in consumer:
print(f"收到消息: {msg.key}:{msg.value}")
四、常见问题解决方案
4.1 消息堆积处理方案
graph TD
A[发现堆积] --> B{堆积原因}
B -->|消费速度慢| C[增加消费者]
B -->|生产过快| D[限流生产者]
C --> E[调整消费者参数]
D --> E
E --> F[优化处理逻辑]
诊断命令:
# 查看积压量
bin/kafka-consumer-groups.sh --describe \
--bootstrap-server localhost:9092 \
--group test-group
# 强制重置偏移量
bin/kafka-consumer-groups.sh --reset-offsets \
--to-earliest \
--topic test-topic \
--execute \
--bootstrap-server localhost:9092 \
--group test-group
4.2 端口冲突解决
冲突检测方法:
import socket
def check_port(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('localhost', port))
return result == 0
print("9092端口占用:", check_port(9092))
print("2181端口占用:", check_port(2181))
修改端口步骤:
- 修改Kafka端口:
# config/server.properties listeners=PLAINTEXT://:9093
- 修改ZooKeeper端口:
# zoo.cfg clientPort=2182
- 重启服务
五、监控与维护
5.1 健康检查脚本
#!/bin/bash
# 检查ZooKeeper状态
echo "ZooKeeper状态:"
echo stat | nc localhost 2181 | grep Mode
# 检查Kafka服务
echo "Kafka Topic列表:"
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
5.2 日志文件说明
日志文件 | 作用 |
---|---|
server.log | Broker运行日志 |
controller.log | 分区领导选举日志 |
state-change.log | 副本状态变更日志 |
kafka-request.log | 客户端请求日志 |
六、性能优化建议
6.1 单节点调优参数
# config/server.properties
num.io.threads=8
num.network.threads=3
log.flush.interval.messages=10000
log.retention.hours=168
6.2 硬件配置参考
资源类型 | 推荐配置 | 说明 |
---|---|---|
CPU | 4核+ | 处理网络IO与消息序列化 |
内存 | 8GB+ | JVM堆内存分配4-6GB |
磁盘 | SSD RAID0 | 保证高吞吐写入性能 |
网络 | 千兆+ | 避免带宽成为瓶颈 |
生产准备清单:
- 完成防火墙端口开放
- 验证副本机制有效性
- 配置日志轮转策略
- 设置监控告警系统
扩展阅读:后续可学习Kafka Connect实现数据管道搭建,完整配置示例见GitHub仓库
附录:Kafka常用端口表
服务 | 默认端口 | 协议 | 作用 |
---|---|---|---|
Kafka Broker | 9092 | TCP | 客户端通信 |
ZooKeeper | 2181 | TCP | 元数据存储 |
JMX Exporter | 7071 | HTTP | 监控指标暴露 |
Kafka Admin | 9093 | HTTPS | 管理接口(可选) |