Flink CDC为什么cdc的时候ui上边的bytesreceived那些都是0?

Flink CDC为什么cdc的时候ui上边的bytesreceived那些都是0?

展开
收起
真的很搞笑 2023-10-31 18:16:01 183 分享 版权
阿里云 AI 助理回答

在使用Flink CDC时,如果UI界面上的Bytes Received等指标显示为0,可能是由于以下原因导致的。以下是详细的原因分析及解决方案:


1. 作业拓扑图中算子未正确分割

  • 问题描述
    如果作业中只有一个节点(例如Source和Sink算子未拆分),则在作业拓扑图中可能无法看到具体的读取和写入数据量,导致Bytes Received显示为0。
  • 解决方案
    需要对算子进行分割,将Source算子和Sink算子拆分为独立的算子,并分别与其他算子连接,形成新的拓扑结构。
    操作步骤
    运维中心 > 作业运维页面,单击目标作业名称,在部署详情 > 运行参数配置 > 其他配置中添加以下参数:
    pipeline.operator-chaining: 'false'
    

    这样可以在拓扑图中看到数据的流向和流量。


2. Kafka分区无数据流入

  • 问题描述
    如果Kafka某个分区没有数据流入,则会影响Watermark的生成,从而导致Bytes Received显示为0。
  • 解决方案
    检查Kafka源表的分区是否有数据流入。如果发现某些分区无数据,可以调整作业并发数,确保所有并发都有数据流入。
    建议
    将作业并发数设置为小于或等于源表Shard数,以保证每个并发都能接收到数据。

3. 数据被过滤或丢弃

  • 问题描述
    数据可能在某个节点被过滤或丢弃,导致下游无数据输出。常见的过滤场景包括JOIN、WHERE或窗口操作。
  • 解决方案
    使用pipeline.operator-chaining: 'false'将节点拆分,然后观察每个节点的Bytes Received(输入)和Bytes Sent(输出)。如果某个节点的输出为0而输入不为0,说明数据被该节点过滤了。
    排查方法
    • 检查是否存在乱序数据,合理设置Watermark以处理乱序数据。
    • 确认维表Cache缓存策略是否正确。

4. MySQL CDC全量阶段未完成

  • 问题描述
    如果MySQL CDC源表处于全量读取阶段,尚未进入增量读取阶段,则可能导致Bytes Received显示为0。
  • 解决方案
    确认MySQL CDC作业是否已完成全量数据同步:
    1. 通过监控告警页面的currentEmitEventTimeLag指标判断。当该指标大于0时,表示已进入增量读取阶段。
    2. 在MySQL CDC源表所在的TM日志中查找BinlogSplitReader is created日志,确认是否读取完全量数据。

5. Checkpoint间隔时间过长

  • 问题描述
    如果Checkpoint间隔时间设置过大,可能导致数据在LocalGroupAggregate节点中长时间卡住,无输出。
  • 解决方案
    调小Checkpoint间隔时间,让LocalGroupAggregate节点在执行Checkpoint前自动触发输出。
    参数配置
    其他配置中添加以下代码:
    table.exec.mini-batch.size: N
    

    其中N为缓存数据条数,建议根据实际业务需求设置。


6. 上游连接器单Partition无数据

  • 问题描述
    如果上游连接器(如Kafka)的某个Partition长时间无数据流入,则会导致Watermark无法推进,窗口输出延迟,进而影响Bytes Received的显示。
  • 解决方案
    设置一个过期时间,表明该Partition无数据时将其排除在Watermark计算之外。
    参数配置
    其他配置中添加以下代码:
    table.exec.source.idle-timeout: 1s
    

7. 日志归档功能未开启

  • 问题描述
    如果日志归档功能未开启,可能导致无法查看历史运行日志,从而影响对Bytes Received的分析。
  • 解决方案
    部署详情页签,开启日志归档功能,并设置日志归档有效期(默认7天,保留最近5 MB大小的运行日志)。

8. 非Static方法日志输出问题

  • 问题描述
    如果日志输出方式不正确,可能导致日志信息无法正常记录,从而影响对Bytes Received的分析。
  • 解决方案
    使用标准的日志定义方式:
    private static final Logger LOG = LoggerFactory.getLogger(xxx.class);
    

总结

通过以上分析,您可以从以下几个方面排查和解决Flink CDC作业中Bytes Received显示为0的问题: 1. 检查算子是否正确分割。 2. 确认Kafka分区是否有数据流入。 3. 排查数据是否被过滤或丢弃。 4. 确认MySQL CDC是否已完成全量数据同步。 5. 调整Checkpoint间隔时间和相关参数。 6. 设置Partition的过期时间。 7. 确保日志归档功能已开启并正确配置日志输出方式。

如果问题仍未解决,建议结合具体日志信息进一步分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理