特定Topic的所有Kafka Broker是否始终存等量数据?单Broker订阅能否读取全量日志?
Kafka 相关问题解答
1. 特定 Topic 的所有 Kafka Broker 在任意时间点是否都存储等量的数据?
不一定。Kafka 基于分区存储数据,每个分区包含主副本和若干从副本(由副本因子配置),实际场景中:
- 若 Topic 分区数无法被 Broker 数量整除,各 Broker 分配到的分区(含主从)数量不一致,存储数据量必然有差异
- 就算分区数能均分,消息本身大小存在差异,也做不到完全等量
- 若集群存在 Broker 故障、副本同步延迟的情况,部分副本数据未完全同步,也会导致各 Broker 存储量不等
只有在分区数完全适配 Broker 数、集群状态完全正常、消息大小近似一致的极端情况下,才可能出现存储量接近的状态,但也无法做到绝对等量。
2. 3 个 Broker 组成的集群中,仅订阅单个 Broker 是否可行?
可行,但绝不推荐这种配置:
- 消费者客户端可以只配置单个 Broker 的地址初始化连接,该 Broker 会将集群元数据(全部分区、Broker 列表等)同步给消费者
- 后续消费者会直接与消息所在分区的主副本 Broker 建立连接拉取数据
- 但如果被指定的这个 Broker 故障,消费者将无法获取集群元数据,直接导致消费中断,可靠性极低
3. 仅订阅单个 Broker 能否读取该 Topic 内的全部日志?
不能(除非 Topic 的所有分区副本恰好都部署在这个 Broker 上,这种情况几乎不会在生产环境出现)。
Kafka 的 Topic 分区会分散在集群的多个 Broker 上,每个 Broker 只存储分配给自己的分区消息。仅连接单个 Broker 的话,只能拉取该 Broker 上存有的分区数据,其他 Broker 上的分区消息完全无法获取,自然读不到 Topic 的全部日志。
内容的提问来源于 stack exchange,提问作者 Sagar Ghanwat
相关产品推荐
相关产品推荐

