这道题目能够诱发我们对分布式系统设计、CAP 理论、一致性等多方面的思考。不过,针 对故 障定位和分析的这类问题,我建议你首先言明“实用至上”的观点,即不论怎么进行理论分析, 永远都要以实际结果为准。一旦发生 Controller 网络分区,那么,第一要务就是 查看集群是 否出现“脑裂”,即同时出现两个甚至是多个 Controller 组件。这可以根据 Broker 端监控指 标 ActiveControllerCount 来判断。

现在,我们分析下,一旦出现这种情况,Kafka 会怎么样。

由于 Controller 会给 Broker 发送 3 类请求,即LeaderAndIsrRequest、 StopReplicaRequest 和 UpdateMetadataRequest,因此,一旦出现网络分区,这些请求将 不能顺利到达 Broker 端。这将影响主题的创建、修改、删除操作的信息同步,表现为 集群仿 佛僵住了一样,无法感知到后面的所有操作。因此,网络分区通常都是非常严重的问 题,要赶 快修复。