At most once——消息可能会丢失但绝不重传
At least once——消息可以重传但绝不丢失
Exactly once—— 每一条消息只被传递一次
记录的是某个topic,某个分区的偏移量,topic name,partition number;
id,topicname,partition number,offset,这个地方的设计找到那篇博客,看看kafka+db同步事务的这种完整的设计模式;
Kafka Configuration
producer
acks
retries
enable.idempotence
max.in.flight.requests.per.connection
Consumer
enable.auto.commit
auto.commit.interval.ms
isolation.level
Kafka Client API
KafkaProducer
initTransactions
beginTransaction
sendOffsetsToTransaction
commitTransaction
abortTransaction
KafkaConsumer
commitSync
commitAsync
如果设置了consumer自动提交之后,也就是enable.auto.commit和auto.commit.interval.ms,则consumer每隔auto.commit.interval.ms自动commit;
Message Delivery Semantics Implementation
At most once
通过禁用 producer 的重传功能和让 consumer 在处理一批消息之前提交 offset,实现 at-most-once 的消息交付
producer:acks=0
consumer:consumer 在处理一批消息之前提交 offset;或者
At least once
Kafka 默认保证 at-least-once 的消息交付