0

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

4

1 回答 1

1

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

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

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

至于顺序,消息在发送之前被批处理。如果多个批次像批次 1批次 2批次 3一样异步发送,并且如果由于某种原因批次 1批次 2批次 3发送后失败,则重新绑定批次 1将在之后产生批次 1 batch-2batch-3,从而使其乱序。

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

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

于 2020-06-11T06:22:51.867 回答