据我所知,rabbitmq生产者在向提供交付保证的代理发送消息时需要确认。Kafka制作人不需要经纪人的确认。这是不是意味着Kafka没有交货保证?如果没有,Kafka如何在没有确认的情况下提供交货保证?我的理解正确吗?请纠正我的任何误解,因为我仍然在学习这些系统。
q7solyqu1#
在0.9.0.0及更高版本中,producer#send有一个返回值,您可以在代理分区中获得消息的偏移量。同时,您可以实现回调,如果没有异常,则表示消息已发送到正确的代理。
bqjvbblv2#
Kafka对此其实很灵活。生产者的确认数量是可配置的。该配置称为 RequiredAcks . 实际上,required acks设置为 ProduceRequest 级别,但我从未见过单个producer示例允许生成具有不同必需acks设置的消息的实现。 RequiredAcks 是一个整数值,表示“代理在响应product请求之前应该等待多少个确认”。有 RequiredAcks 设置为 0 (不建议用于生产)表示“触发并忘记”,例如,代理将立即响应,而无需等待数据写入日志。在这种情况下,您可能会在不知情的情况下丢失消息。有 RequiredAcks 设置为 1 表示“等待数据写入本地日志”,其中本地日志是接收请求的代理的日志。一旦您的数据被写入本地日志,代理就会做出响应。有 RequiredAcks 设置为 -1 表示“等待数据写入本地日志并由所有ISR复制”。每个 ProduceRequest 也有一个 Timeout 字段,表示“等待必要数量的确认的最长时间”。所以Kafka支持确认请求,但允许关闭确认。
RequiredAcks
ProduceRequest
0
1
-1
Timeout
2条答案
按热度按时间q7solyqu1#
在0.9.0.0及更高版本中,producer#send有一个返回值,您可以在代理分区中获得消息的偏移量。同时,您可以实现回调,如果没有异常,则表示消息已发送到正确的代理。
bqjvbblv2#
Kafka对此其实很灵活。
生产者的确认数量是可配置的。该配置称为
RequiredAcks
. 实际上,required acks设置为ProduceRequest
级别,但我从未见过单个producer示例允许生成具有不同必需acks设置的消息的实现。RequiredAcks
是一个整数值,表示“代理在响应product请求之前应该等待多少个确认”。有
RequiredAcks
设置为0
(不建议用于生产)表示“触发并忘记”,例如,代理将立即响应,而无需等待数据写入日志。在这种情况下,您可能会在不知情的情况下丢失消息。有
RequiredAcks
设置为1
表示“等待数据写入本地日志”,其中本地日志是接收请求的代理的日志。一旦您的数据被写入本地日志,代理就会做出响应。有
RequiredAcks
设置为-1
表示“等待数据写入本地日志并由所有ISR复制”。每个
ProduceRequest
也有一个Timeout
字段,表示“等待必要数量的确认的最长时间”。所以Kafka支持确认请求,但允许关闭确认。