【问题标题】:SpringBoot batch listener mode vs non-batch listener modeSpring Boot 批处理侦听器模式与非批处理侦听器模式
【发布时间】:2021-08-31 16:43:18
【问题描述】:

我只是好奇 Spring Kafka 中的批处理侦听器模式是否比非批处理侦听器模式提供更好的性能? 如果我们正在处理异常,那么我们仍然需要在 Batch-listener 模式下处理每条记录。非批处理似乎不太容易出错、稳定且可定制。

请分享您对此的看法,因为我没有找到任何好的比较。

【问题讨论】:

    标签: apache-kafka spring-kafka


    【解决方案1】:

    这完全取决于你的听众对数据做了什么。

    如果它循环处理每条记录,则没有任何好处;您不妨让容器遍历集合并一次向侦听器发送一条记录。

    如果您将批处理作为一个整体处理,批处理模式将提高性能 - 例如在单个事务中使用 JDBC 进行批量插入。

    这通常比一次存储一条记录(为每条记录使用一个新事务)运行得快得多,因为它需要更少的往返数据库服务器。

    【讨论】:

    • 是的,这是有道理的。在我的情况下,我只是试图将请求发送到不同的微服务。我尝试使用批处理来利用并行流 API,但看起来它很难管理失败的偏移量,因为它不同如果服务关闭,线程可能会失败。
    • 鉴于消费者需要一些时间来读取来自 Broker 的消息,该时间可能从 1 毫秒到 100 毫秒或更多不等。批量获取消息,即在 1 次行程中阅读 10 条消息而不是在 10 次行程中阅读 10 条消息会有所不同吗?如果非批处理行程仅花费 10 毫秒来获取每条消息,并且每秒有 200 条消息到达?
    • 这似乎是一个不相关的问题 - 在民意调查中获取的消息数量取决于各种 kafka 属性(max.poll.records、min.fetch.bytes 等)。这个问题是关于一旦轮询返回的记录如何处理,与客户端和代理之间的延迟无关。是的,当然,最好在每个请求上获得更多消息。不要在 cmets 中提出新问题。
    • 感谢您的回答和建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多