【问题标题】:How do I fix a "Message was too large, server rejected it" error in a cockroachdb changefeed?如何修复 cockroachdb changefeed 中的“消息太大,服务器拒绝它”错误?
【发布时间】:2022-01-20 16:34:29
【问题描述】:

当我在 Kafka 中运行 changefeed 时,它会发出一段时间的消息,但随后会卡住。在作业状态或日志中,我看到错误 kafka server: Message was too large, server rejected it to avoid allocation error.

这是什么意思,我该如何解决?

【问题讨论】:

    标签: apache-kafka cockroachdb


    【解决方案1】:

    Changefeeds 每行发出一条消息,单个消息的大小与更改的数据库行的大小成正比。如果您的最大行长度足够大,那么一个批次,甚至是一条单独的消息,可能会比您的 Kafka 服务器配置支持的要大。这最常发生在 jsonb 列中。这最终会阻止 changefeed 在包含这些大行的范围上取得进展,甚至可能导致重复重试,从而导致与较大消息一起批处理的较小消息下游出现大量重复。

    如果可能,最简单的解决方案是增加 Kafka 的最大消息大小。这个答案会告诉你how to adjust broker configuration

    如果您无法调整 Kafka 的代理设置,您可以使用 kafka_sink_config 配置一些客户端设置,如文档中的 here 所述。默认情况下,Kafka changefeeds 配置为最小化消息大小(无批处理),因此这仅在 kafka_sink_config 已被使用时才有帮助。

    最后的手段是删除或压缩表中的违规行,然后启动 changefeed 的副本。请注意,简单地恢复现有提要,或在行被修复之前使用光标启动一个提要,将不起作用,因为提要仍会尝试发出旧版本的行。

    CockroachDB 的未来版本将更干净地处理从这个问题中恢复的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2014-05-01
      • 2018-06-03
      相关资源
      最近更新 更多