kafka消息语义交付:
- 最多一次(at most once):消息可能丢失也可能被处理,但最多只能被处理一次。
- 至少一次(at least once):消息不会丢失,但可能被处理多次。
- 精确一次(exactly once):消息被处理且只会被处理一次。
ACKS
acks参数用于控制producer生产消息的持久性(durability)。对producer而言,kafka在乎的是已提交消息的持久性。一旦消息被提交成功,那么只要有任何一个保存了消息的副本存活,这条消息被视为不会丢失的。
acks有3个值:0,1,all(-1)
- acks=0:producer不进行消息接收是否成功的确认。
- acks=1(默认):当Leader副本接收成功后,返回接收成功确认信息;
- acks=all或者-1:当Leader和Follower副本都接收成功后,返回接收成功确认信息。
从上面acks的设置中可以知道,当acks=0时,一旦发生宕机,肯定会发生消息丢失的情况;acks=1时,只要leader broker一直存活,kafka能够保证消息不丢失;acks=all时,只要还有副本存活,那么这条消息肯定不会丢失。
无消息丢失配置
参考apache kafka实战4.6,6.4章节