上一篇内容我们了解到 Kafka 通过 ISR 机制平衡了各个 Partition 之间的可用性和一致性,通过顺序读写/PageCache/零拷贝保证了 Kafka 的高性能。这里我们继续深入之前没有完成的话题,Kafka 还有一块非常重要的内容 —— 消息投递语义,这块内容和流式计算息息相关,解决的消费数据的唯一性的问题。
本篇面试内容划重点:消息投递语义、幂等、rebalance、调优。
Kafka 的消息投递语义
kafka 支持 3 种消息投递语义,最多一次,最少一次,恰好一次。具体看下述说明。
At most once:最多一次 这种语义可能存在消息丢失的情况,但不会重复消费。Producer 端发送消息时配置异步发送即是这一种语义,可能存在数据丢失的情况,好处是高效,不需要等待 Broker 响应成功消息。 大家都知道,Consumer 在消费数据时需要管理 Offset,那么如果 consumer 在读取消息后,先修改 offset,然后处理消息,这就是最多一次的语义,但是生产环境中一般不会用这种方式。
At least once:最少一次 这种语义消息不会丢失,但是可能会重复。Producer 端同步发送消息时&#