【问题标题】:Differences in Kafka and Rabbit producers-broker acknowledgementKafka 和 Rabbit 生产者-broker 确认的区别
【发布时间】:2016-04-20 17:30:45
【问题描述】:

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

我的理解正确吗?请纠正我对这些系统的任何误解。

【问题讨论】:

  • 注意:RabbitMQ 生产者不需要太确认。您可以使用事务或使用发布/确认来启用确认
  • @NicolasLabrot 您能否详细说明“使用事务启用 ack?”。这与常规确认有何不同?

标签: rabbitmq apache-kafka


【解决方案1】:

Kafka 实际上对此很灵活。

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

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

RequiredAcks 设置为0(非常不推荐用于生产)意味着“一劳永逸”,例如代理将立即响应,而无需等待数据写入日志。在这种情况下,您可能会在不知情的情况下丢失消息。

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

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

每个ProduceRequest 也有一个Timeout 字段,表示“等待必要数量的确认的最长时间”。

所以 Kafka 支持确认请求,但允许关闭确认。

【讨论】:

    【解决方案2】:

    在0.9.0.0及以上版本,producer#send有一个返回值Future可以获取消息在broker的分区中的偏移量。同时可以实现Callback,如果没有异常就说明消息已经发送到正确的broker了。

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 2020-08-20
      • 1970-01-01
      • 2017-04-28
      • 2018-02-05
      • 1970-01-01
      相关资源
      最近更新 更多