管理类 如何保证消息发布的可靠性? 如果acks0,生产者在成功写入消息之前是不会等待任何的来自服务器的响应。可靠性最低、性能最优。 如果acks1,只要集群的首领节点收到消息,生产者就会收到来自服务器成功的响应。 如果acksall / 1,只有在集群所有的跟随副本都接收到消息后,生产者才会受到一个来自服务器的成功响应。可靠性最高,性能最差。 如何保证消息的顺序? Kafka 每个 Partition 都是相互独立的,Kafka 只能保证单个 Partition 下的有序。 局部有序:当我们所需要的有序其实是针对单个用户的有序,而不要求全局有序。我们可以以用户的 ID 作为 key , 确保单个用户一定会被分配到某个固定的 Partition 上(可能会引起数据倾斜问题),这样我们就能够实现单个用户维度的有序了。 如果一定要全局的有序,所有消息都使用同一个 key ,这样他们一定会被分配到同一个 Partition 上,这种做法适用于临时性且数据量不大的小需求,消息量大了会有性能压力。 如何选择 Partiton 的数量? 在创建 Topic 的时候可以指定 Partiton 数量,也可以在创建完后手动修改。但 Partiton 数量只能增加不能减少。中途增加 Partiton 会导致各个 Partiton 之间数据量的不平等。 Partition 的数量直接决定了该 Topic 的并发处理能力。但也并不是越多越好。Partition 的数量对消息延迟性会产生影响。 一般建议选择 Broker Num Consumer Num ,这样平均每个 Consumer 会同时读取 Broker 数目个 Partition , 这些 Partition 压力可以平摊到每台 Broker 上。