【问题标题】:Spring kafka batch listener prints whole consumer recordSpring kafka 批处理监听器打印整个消费者记录
【发布时间】:2020-06-08 16:51:03
【问题描述】:

配置

    props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 1000);
    props.put(ConsumerConfig.FETCH_MAX_WAIT_MS_CONFIG, 10);
    props.put(ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG, 50*1024*1024);
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);

打印整个有效载荷,获取它和消费者数据的任何帮助都会有所帮助 ConsumerRecord(topic = xxxxxxx, partition = 2, offset = 1512343, CreateTime = 1591460009853, 序列化键大小 = 8, 序列化值大小 = 9506789.......

日志太大,无法打印和分析

编辑 2:可以在那个大日志中看到更多这个异常 原因:org.springframework.kafka.KafkaException: Interrupted while queuing ack

【问题讨论】:

  • >prints the whole payload - 不清楚你的意思是什么,或者什么软件正在“打印”它。如果是您的代码,您可以修改打印的内容。 Spring 只在 DEBUG 日志中记录整个记录。如果这就是您的意思,我们可以添加一个选项来防止这种情况发生。它究竟是在“哪里”被“打印”的?
  • 这是一个错误日志,出了点问题,假设这可能是消息大小
  • 您能否编辑问题以显示日志(减去记录),以便我可以准确查看需要更新哪些记录器?
  • 谢谢拉塞尔,我仍然在打岩石,为什么这些首先发生,喜欢不要打印消息,只是元数据足以应对任何审计/错误
  • 修复应该在周三发布。该错误是因为您使用 MANUAL_IMMEDIATE AckMode 在 foreign 线程上调用 Acknowledgment.acknowledge();并且该外来线程已被中断,从而阻止了 ack 的排队。

标签: java spring apache-kafka spring-kafka


【解决方案1】:

我打开了new feature request

可以在那个大日志中看到更多这个异常原因:org.springframework.kafka.KafkaException: Interrupted while queuing ack

该错误是因为您在带有MANUAL_IMMEDIATE AckMode 的外部线程上调用Acknowledgment.acknowledge();并且该外来线程已被中断,从而阻止了 ack 的排队。

如果可能,最好在侦听器线程上调用它。

【讨论】:

  • 不幸的是,在同一个线程和同一个函数上确认,我正在尝试修改会话、心跳、轮询间隔以查看是否一切正常以防 GC 暂停(这是我的怀疑) 给定例外
  • 同时绑定自动提交以查看是否有帮助
  • 功能请求应该有助于选择仅打印元数据,很少有大消息(在我的情况下是快速压缩的)大小的事件可以提供帮助。为了避免这个错误,我们可能需要处理 GC 暂停。当服务/处理器变好时,分区重新分配帮助它得到处理
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 2021-05-06
  • 2019-08-25
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多