【发布时间】:2017-09-01 11:46:44
【问题描述】:
我正在使用 spring-kafka 版本 1.1.3 来使用来自主题的消息。在消费者配置中,自动提交设置为 true 和 max.poll.records 到 10。 session.timeout.ms 与服务器协商为 10 秒。
收到一条消息后,我将其中的一部分保存到数据库中。我的数据库有时会很慢,这会导致 kafka 监听器的会话超时:
组 mygroup 的自动偏移提交失败:提交无法完成 因为该组已经重新平衡并将分区分配给 另一个成员。这意味着后续调用之间的时间 poll() 比配置的 session.timeout.ms 长,这 通常意味着轮询循环花费了太多时间消息 加工。您可以通过增加会话来解决这个问题 超时或通过减少 poll() 中返回的批处理的最大大小 使用 max.poll.records。
由于我无法增加服务器上的会话超时并且max.poll.records 已经下降到 10,我希望能够将我的数据库调用包装在一个事务中,如果是 kafka,它将回滚会话超时。
这可能吗?我该如何做到这一点?
很遗憾,我无法在文档中找到解决方案。
【问题讨论】:
-
为什么要回滚数据库提交?如果您只需要将使用者设置为手动提交,然后捕获异常。
-
什么异常?仅记录上述消息。据我所知,kafka session 超时没有抛出异常。
标签: spring apache-kafka spring-kafka