面试题答案
一键面试1. broker.id
- 作用:每个Kafka broker必须有一个唯一的标识符。它用于在集群中区分不同的broker实例,确保各个broker之间能够正确通信与协调,比如在选举领导者副本(leader replica)等场景下,broker.id是重要的标识依据。
2. listeners
- 作用:指定Kafka broker监听的地址和端口。通过该参数,broker能够明确自己在网络中监听客户端连接的位置,客户端根据此配置来连接到相应的broker进行消息的生产与消费。例如可以配置为
listeners=PLAINTEXT://:9092
,表示监听9092端口的PLAINTEXT协议连接。
3. advertised.listeners
- 作用:向集群中的其他broker以及客户端公布的监听器。在一些复杂网络环境(如Docker容器、云环境等)中,broker实际监听的地址可能无法直接被外部访问,
advertised.listeners
就用于告知其他节点和客户端可访问的地址。比如,容器内broker监听127.0.0.1:9092,但外部需通过宿主机IP:9092访问,就可配置advertised.listeners=PLAINTEXT://宿主机IP:9092
。
4. log.dirs
- 作用:指定Kafka日志文件存储的目录路径。Kafka将消息持久化存储在这些目录中,可配置多个目录以实现磁盘I/O负载均衡,提高读写性能。例如
log.dirs=/var/lib/kafka-logs1,/var/lib/kafka-logs2
。
5. zookeeper.connect
- 作用:指定Kafka连接Zookeeper集群的地址和端口。Kafka依赖Zookeeper来管理集群元数据(如broker列表、主题信息、分区分配等)以及进行选举等协调工作。格式通常为
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
。
6. num.partitions
- 作用:在创建主题时,如果未明确指定分区数,该参数作为默认的分区数量。分区有助于提高Kafka的并行处理能力和扩展性,不同分区可以分布在不同的broker上,实现负载均衡,提高消息读写的吞吐量。
7. replica.lag.time.max.ms
- 作用:用于定义副本滞后的最大时间(毫秒)。如果一个副本在指定时间内没有与领导者副本同步,那么它将被认为是“滞后的”。此参数对于维护副本一致性和集群健壮性很重要,当副本长时间滞后时,可能会影响数据的可靠性和可用性,甚至在领导者副本故障时无法及时选出有效副本接替。