面试问题列表
Kafka的ISR机制是什么?如何保证数据一致性?
如何实现Kafka的Exactly-Once语义?
Kafka的Rebalance机制可能引发什么问题?如何优化?
Kafka的Topic分区数如何合理设置?
如何设计Kafka的高可用跨机房容灾方案?
Kafka Producer的acks参数对消息可靠性有何影响?
Kafka Consumer的auto.offset.reset参数有哪些配置?适用场景?
如何监控Kafka的Lag(消费延迟)?
Kafka的Log Compaction原理是什么?
如何解决Kafka集群中Broker磁盘IO瓶颈?
Kafka与RocketMQ在事务消息实现上的区别是什么?
kafka架构图
学习或复习kafka前很有必要了解一下kafka架构图,只有这样部分问题才能看起来清晰一点。
网上已经有很多现成的kafka架构图,这里就直接找了一个:
该图参考地址
核心组件说明:
- Topic:消息分类单元(如
order-events
) - Partition:物理存储单元(保证分区内有序)
- Broker:服务节点(形成分布式集群)
- Producer:消息生产者(支持批量发送)
- Consumer:消费者组(实现负载均衡)
- Replica:副本机制(Leader处理读写,Follower同步)
- Zookeeper:集群协调(元数据管理/控制器选举)
实战准备
这是国内网络环境下安装最新稳定版Kafka和Zookeeper的完整指南(基于Kafka 3.7.0):
- 使用国内镜像源下载Kafka:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.7.0/kafka_2.13-3.7.0.tgz
- 安装Java环境:
sudo apt update
sudo apt install openjdk-17-jdk -y
- 解压安装(使用/opt目录):
tar -xzf kafka_2.13-3.7.0.tgz
sudo mv kafka_2.13-3.7.0 /opt/kafka
- 配置Zookeeper(编辑配置文件):
sudo nano /opt/kafka/config/zookeeper.properties
修改以下配置:
dataDir=/var/lib/zookeeper
clientPort=2181
maxClientCnxns=60
- 配置Kafka(编辑配置文件):
sudo nano /opt/kafka/config/server.properties
修改以下关键配置:
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://your_server_ip:9092
log.dirs=/var/lib/kafka
zookeeper.connect=localhost:2181
- 创建服务管理脚本(替代systemd方案):
创建启动脚本:
sudo nano /opt/kafka/start_services.sh
内容:
#!/bin/bash
/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties > /var/log/zookeeper.log 2>&1 &
sleep 5
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties > /var/log/kafka.log 2>&1 &
- 设置文件权限:
sudo chmod +x /opt/kafka/start_services.sh
sudo mkdir -p /var/lib/{zookeeper,kafka}
sudo chown -R $USER:$USER /var/lib/{zookeeper,kafka}
- 启动服务:
cd /opt/kafka && ./start_services.sh
- 验证安装:
# 查看Zookeeper日志
tail -f /var/log/zookeeper.log
# 创建测试主题
/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
# 列出主题
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092