Kafka系列2:深入理解Kafka生产者(13)

要注意的是 , 只有在不改变分区主题分区数量的情况下 , 键与分区之间的映射才能保持不变 。

顺序保证

Kafka可以保证同一个分区里的消息是有序的 。 考虑一种情况 , 如果retries为非零整数 , 同时max.in.flight.requests.per.connection为比1大的数如果某些场景要求消息是有序的 , 也即生产者在收到服务器响应之前可以发送多个消息 , 且失败会重试 。 那么如果第一个批次消息写入失败 , 而第二个成功 , Broker会重试写入第一个批次 , 如果此时第一个批次写入成功 , 那么两个批次的顺序就反过来了 。 也即 , 要保证消息是有序的 , 消息是否写入成功也是很关键的 。 那么如何做呢?在对消息的顺序要严格要求的情况下 , 可以将retries设置为大于0 , max.in.flight.requests.per.connection设为1 , 这样在生产者尝试发送第一批消息时 , 就不会有其他的消息发送给Broker 。 当然这回严重影响生产者的吞吐量 。

推荐阅读