Kafka和Rabbit生产商的差异 - 经纪人的承认

时间:2016-04-20 17:30:45

标签: rabbitmq apache-kafka

根据我的理解,RabbitMQ生产商在向提供交付保证的经纪人发送消息时需要确认。 Kafka生产商 需要经纪人的确认。这是否意味着Kafka没有送货保证?如果没有,Kafka如何在没有确认的情况下提供交付保证?

我的理解是否正确?请更正我所有的误解,因为我还在学习这些系统。

2 个答案:

答案 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,你可以在代理的分区中得到消息的偏移量。同时,您可以实现回调,如果没有异常,则表示该消息已发送给正确的经纪人。