如上图所示:
Producer根据指定的partition方法(默认round-robin、hash等),将消息发布到指定topic的partition里面;
kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费;
Consumer从kafka集群pull数据,并控制获取消息的offset。
下面讨论以下Kafka如何确保消息在producer和consumer之间的传输。producer与consumer
有可能的delivery guarantee:
- At most once 消息可能会丢,但绝不会重复传输
- At least one 消息绝不会丢,但可能会重复传输
- Exactly once 每条消息肯定会被传输一次且仅传输一次,很多时候这是用户所想要的
producer 的deliver guarantee 可以通过request.required.acks参数的设置来进行调