反应式卡夫卡制作人
Reactive kafka producer
正在探索反应式 kafka,只是想确认反应式 kafka 是否等同于同步生产者。使用同步生产者,我们通过 ACK 获得消息传递保证,并维护生产者序列。但是,ASYNC 不能保证交付和排序。反应式生产者相当于 SYNC 还是 ASYNC?
响应式意味着异步。在普通的 Kafka 客户端 API 中,KafkaProducer
也是异步的。当您显式调用阻止程序执行的 kafkaProducer.send().get()
时,它会变为同步。
即使使用异步生产者,也可以保证消息传递。这取决于号码。重试次数和 delivery.timeout.ms
.
使用 ack=all
可以确保数据在 ISR 之间复制,并且您可以通过一致性保证获得容错,以防万一其中一个代理死亡,消费者可以看到应该看到的内容。
至于顺序,消息在发送之前进行了批处理。如果像 batch-1、batch-2、batch-3 那样异步发送多个批次,并且如果由于某种原因 batch-1 在 batch-2 和 batch-3 发送后失败,然后重新绑定 batch-1 将在 batch-2、batch 之后生成 batch-1 -3,从而使其乱序。
如果你想要顺序,你需要确保 max.in.flight.requests.per.connection 设置为 1
以便每个生产者在任何给定的时刻只能有一个请求在进行中。但是,这可能会影响性能。您可能想要调整其他设置,例如 batch.size
,例如增加它,以通过将飞行请求设置为 1 来提高吞吐量。
因此,您关于使用 ASYNC 无法保证交付和排序的假设是错误的。
正在探索反应式 kafka,只是想确认反应式 kafka 是否等同于同步生产者。使用同步生产者,我们通过 ACK 获得消息传递保证,并维护生产者序列。但是,ASYNC 不能保证交付和排序。反应式生产者相当于 SYNC 还是 ASYNC?
响应式意味着异步。在普通的 Kafka 客户端 API 中,KafkaProducer
也是异步的。当您显式调用阻止程序执行的 kafkaProducer.send().get()
时,它会变为同步。
即使使用异步生产者,也可以保证消息传递。这取决于号码。重试次数和 delivery.timeout.ms
.
使用 ack=all
可以确保数据在 ISR 之间复制,并且您可以通过一致性保证获得容错,以防万一其中一个代理死亡,消费者可以看到应该看到的内容。
至于顺序,消息在发送之前进行了批处理。如果像 batch-1、batch-2、batch-3 那样异步发送多个批次,并且如果由于某种原因 batch-1 在 batch-2 和 batch-3 发送后失败,然后重新绑定 batch-1 将在 batch-2、batch 之后生成 batch-1 -3,从而使其乱序。
如果你想要顺序,你需要确保 max.in.flight.requests.per.connection 设置为 1
以便每个生产者在任何给定的时刻只能有一个请求在进行中。但是,这可能会影响性能。您可能想要调整其他设置,例如 batch.size
,例如增加它,以通过将飞行请求设置为 1 来提高吞吐量。
因此,您关于使用 ASYNC 无法保证交付和排序的假设是错误的。