1.传递保障
在一个分布式发布订阅消息系统中,组成系统的计算机总会由于各自的故障而不能正常工作。在Kafka中,一个单独的broker,可能会在生产者发送消息到一个topic的时候宕机,或出现网络故障,从而导致生产者发送消息失败。
kafka提供了三种传递保障来解决上述问题,其依赖producer和consumer共同实现,主要依赖producer,在代码中由“properties.put(ProducerConfig.ACKS_CONFIG, “all”);”体现,配置的值有以下三种情况(server完成producer request前需要确认的数量)。
(1).0
最多一次,server收到0或者1次消息,producer消息发出后,不会等待server的响应,也不会重发,无法保证消息是否成功发送到broker中。
(2).1
正好一次,最严格的,收到1次消息。producer发送消息时,会带上一个transactionId,server接收到之后,会进行去重,如果存储过则会拒绝。如果server没有响应,producer会把transactionId和消息重新发一遍。
(3).all或者-1
至少一次,server收到1次或者多次消息,producer发出消息后一定要等待server的响应,如果生产者没有得到server的响应则会重发。