【问题标题】:Kafka batch listener, polling fixed numbers of records ( as much as possible)Kafka 批处理监听器,轮询固定数量的记录(尽可能)
【发布时间】:2020-05-30 14:10:37
【问题描述】:

我正在使用 Spring Boot 版本 1.5.4.RELEASE 和 spring Kafka 版本 1.3.8.RELEASE。

我的 Kafka 消费者正在批量处理 100 个。我尝试使用的主题有 10 个分区,而我确实有 10 个 Kafka 消费者实例。

除了特定分区中的最后一个块之外,我是否可以强制获取 100 条固定数量的记录(尽可能多)。

【问题讨论】:

    标签: spring-boot apache-kafka spring-kafka


    【解决方案1】:

    Kafka 没有财产fetch.min.records

    你能做的最好的就是模拟它:

    fetch.min.bytes:服务器应为获取请求返回的最小数据量。如果可用数据不足,则请求将在响应请求之前等待累积那么多数据。 1 字节的默认设置意味着只要有一个字节的数据可用或获取请求超时等待数据到达,就会响应获取请求。将此设置为大于 1 的值将导致服务器等待大量数据累积,这可以稍微提高服务器吞吐量,但会增加一些延迟。

    fetch.max.wait.ms:如果没有足够的数据立即满足 fetch.min.bytes 给出的要求,服务器将在响应 fetch 请求之前阻塞的最长时间。

    如果您的记录具有相似的长度,这将起作用。

    顺便说一句,Spring Boot 1.5.x 已经结束,不再受支持。当前的 Boot 版本是 2.2.3。

    【讨论】:

    • 在达到一定字节数之前,不想在服务器端留下消息。不确定如何使用提到的属性来实现我想要的。
    • 如果您的记录每条大约 200 字节长,并且您希望以大约 100 个块的形式获取它们,则设置 fetch.min.bytes=20000 (200x100)。将 fetch.max.wait.ms 设置为 1000,这样您就不会等待超过一秒钟的“完整”批次。
    • @GaryRussell 嘿!相反,消费者可以不轮询所有记录,而只发送前 100 条记录吗?
    • 不要在 cmets 中提出新问题;无论如何,不​​清楚您的意思;提出一个更详细的新问题。
    • 那你倒霉了;卡夫卡根本不支持你想做的事。您只能指定将返回或超过最大等待时间的记录的最小聚合大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多