Rabbitmq 卡夫卡与兔子的区别

Rabbitmq 卡夫卡与兔子的区别,rabbitmq,apache-kafka,Rabbitmq,Apache Kafka,据我所知,RabbitMQ生产者在向提供交付保证的代理发送消息时需要确认。卡夫卡制作人不需要经纪人的确认。这是否意味着卡夫卡没有交货保证?如果没有,卡夫卡如何在没有确认的情况下提供交付担保 我的理解正确吗?请纠正我的任何误解,因为我仍在学习这些系统 卡夫卡在这方面其实很灵活 生产者的确认数量是可配置的。该配置称为requiredcacks。事实上,required acks设置在ProduceRequest级别,但我从未见过单个生产者实例允许使用不同的required acks设置生成消息的实现

据我所知,RabbitMQ生产者在向提供交付保证的代理发送消息时需要确认。卡夫卡制作人不需要经纪人的确认。这是否意味着卡夫卡没有交货保证?如果没有,卡夫卡如何在没有确认的情况下提供交付担保


我的理解正确吗?请纠正我的任何误解,因为我仍在学习这些系统

卡夫卡在这方面其实很灵活

生产者的确认数量是可配置的。该配置称为
requiredcacks
。事实上,required acks设置在
ProduceRequest
级别,但我从未见过单个生产者实例允许使用不同的required acks设置生成消息的实现

RequiredAcks
是一个整数值,表示“代理在响应生产请求之前应等待多少次确认”

RequiredAcks
设置为
0
(不建议用于生产)意味着“触发并忘记”,例如,代理将立即响应,而无需等待数据写入日志。在这种情况下,您可能会在不知情的情况下丢失消息

RequiredAcks
设置为
1
意味着“等待数据写入本地日志”,其中本地日志是接收请求的代理的日志。一旦您的数据写入本地日志,代理就会响应

RequiredAcks
设置为
-1
意味着“等待数据写入本地日志并由所有ISR复制”

每个
ProduceRequest
也有一个
Timeout
字段,这意味着“等待必要数量的确认的最长时间”


因此Kafka支持确认请求,但允许关闭确认。

在0.9.0.0及更高版本中,producer#send有一个返回值,您可以在代理分区中获取消息的偏移量。同时,您可以实现回调,如果没有异常,这意味着消息已发送到正确的代理。

注意:RabbitMQ producer不需要太多确认。您可以使用事务或发布来启用ack/confirm@NicolasLabrot您能详细说明一下“使用事务启用确认”吗。这与常规确认有什么不同?