根据我的理解,RabbitMQ生产商在向提供交付保证的经纪人发送消息时需要确认。 Kafka生产商 不 需要经纪人的确认。这是否意味着Kafka没有送货保证?如果没有,Kafka如何在没有确认的情况下提供交付保证?
我的理解是否正确?请更正我所有的误解,因为我还在学习这些系统。
答案 0 :(得分:2)
卡夫卡实际上很灵活。
生产者的确认数量是可配置的。配置称为RequiredAcks
。事实上,所需的ack设置在ProduceRequest
级别,但我从未见过单个生产者实例允许生成具有不同所需ack设置的消息的实现。
RequiredAcks
是一个整数值,表示“代理在响应产品请求之前应该等待多少次确认”。
将RequiredAcks
设置为0
(非常不推荐用于制作)意味着“点不费话”,例如代理将立即响应,而无需等待数据写入日志。在这种情况下,您可能会在不知情的情况下丢失消息。
将RequiredAcks
设置为1
表示“等待数据写入本地日志”,其中本地日志是接收请求的代理的日志。一旦您的数据写入本地日志,代理就会响应。
将RequiredAcks
设置为-1
意味着“等待数据写入本地日志并由所有ISR复制”。
每个ProduceRequest
也有一个Timeout
字段,表示“等待必要数量的确认的最长时间”。
因此,Kafka支持确认请求,但允许关闭确认。
答案 1 :(得分:0)
在0.9.0.0及更高版本中,生产者#send有一个返回值Future,你可以在代理的分区中得到消息的偏移量。同时,您可以实现回调,如果没有异常,则表示该消息已发送给正确的经纪人。