【问题标题】:Kafka Synchronous Producer卡夫卡同步生产者
【发布时间】:2020-12-21 03:29:36
【问题描述】:

我遇到了以下关于生产者同步发送的问题。我知道上下文生产者中的异步机制

在这个未来调用 get() 将阻塞,直到相关的请求 完成,然后返回记录的元数据或抛出任何 发送记录时发生的异常。

相关请求完成到底是什么意思,我很确定这不是指完成请求,而是这个短语在多大程度上指代?直到经纪人?直到生产者等使用的缓冲区..?

ack = all 与同步生产者和异步生产者一起使用时有何不同?两种情况都被阻止确认?

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案1】:

    生产者有一个内部队列来缓冲一些记录(基于配置linger.msmin.batch.size)。有一个内部后台线程请求代理(领导分区所在的位置)发送批处理数据。根据配置max.connections.in.flight,生产者可以并行处理多个请求。这就是“关联请求”的意思。

    ack = all 与同步生产者和异步生产者一起使用时有何不同?两种情况都被阻止确认?

    get 方法将阻塞,直到对代理的请求完成,这意味着它收到了基于 acks 设置的所有确认。

    使用get 方法总是会导致同步生产者。

    【讨论】:

    • 感谢您的见解,非常有帮助。如果 不使用 get 方法(异步)使用 acks=all 会有什么行为,生产者是否仍会在前台线程或内部后台线程方面被阻塞,因为领导者需要等待来自 ISR 的确认
    • 如果 acks=all,异步生产者将在回调中接收副本的响应。但是,您的代码并未被阻止。
    猜你喜欢
    • 2021-05-27
    • 2017-02-21
    • 1970-01-01
    • 2020-08-27
    • 2019-04-09
    • 2021-01-20
    • 2019-09-24
    • 2020-09-30
    • 2017-11-23
    相关资源
    最近更新 更多