【问题标题】:Reactive kafka producer反应式卡夫卡生产者
【发布时间】:2020-09-30 10:46:29
【问题描述】:

我正在探索反应式 kafka,只是想确认反应式 kafka 是否等同于同步生产者。使用同步生产者,我们通过 ACK all 获得消息传递保证,并保持生产者顺序。但是,ASYNC 不能保证交付和排序。响应式生产者相当于 SYNC 还是 ASYNC?

【问题讨论】:

    标签: apache-kafka kafka-producer-api reactive-kafka


    【解决方案1】:

    反应性意味着异步。在普通的 Kafka 客户端 API 中,KafkaProducer 也是异步的。当您显式调用阻止程序执行的kafkaProducer.send().get() 时,它将变为同步。

    即使使用异步生产者,也可以保证消息传递。这取决于否。重试次数和delivery.timeout.ms

    使用ack=all 可以确保在 ISR 之间复制数据,并且您可以获得具有一致性保证的容错性,以防万一代理死亡,消费者会看到想要看到的内容。

    对于顺序,消息在发送之前是经过批处理的。如果多个批次像 batch-1batch-2batch-3 那样异步发送,如果由于某种原因 batch-1 batch-2batch-3 发送后 失败,然后重新发送 batch-1 将产生 batch- 1batch-2 之后,batch-3,从而使其乱序。

    如果您想要序列,您需要确保将max.in.flight.requests.per.connection 设置为1,以便每个生产者在任何给定时间只能有一个请求在进行中。但是,这可能会对性能产生影响。您可能需要调整其他设置,例如 batch.size,例如增加它,以便在将飞行请求设置为 1 的情况下提高吞吐量。

    因此,您认为 ASYNC 无法保证交付和排序的假设是错误的。

    【讨论】:

      猜你喜欢
      • 2017-02-21
      • 2020-08-27
      • 2019-04-09
      • 2021-01-20
      • 2019-09-24
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多