记一次flink不做checkpoint的问题

本文记录了一次Flink在UI中未进行checkpoint的情况,问题源于source并行度超过Kafka分区数,部分subtask进入finished状态。检查代码和CheckpointCoordinator的triggerCheckpoint方法确认,只有ExecutionState.RUNNING的subtask才会触发checkpoint。解决方案是确保source并发度不大于Kafka的partition数,以避免性能损失。此问题在Flink 1.5版本及更高版本已修复。
摘要由CSDN通过智能技术生成

问题现象: Flink UI界面查看checkpoint的metrics发现一直没有做checkpoint,仔细排查发现有部分subtask的状态是finished。
下图是测试环境复现问题
在这里插入图片描述
问题原因: 仔细排查代码后发现source是消费kafka的数据,配置的并行度大于kafka的partition数,导致有部分subtask空闲,然后状态变为finished。后来查看了checkpoint过程的源码得以佐证。
在CheckpointCoordinator类的triggerCheckpoint方法中有如下代码段

// check if all tasks that we need to trigger are running.
		// if not, abort the checkpoint
		Execution[] executions = new Execution[tasksToTrigger.length];
		for (int i = 0; i < tasksToTrigger.length; i++) {
			Execution ee = tasksToTrigger[i].getCurrentExecutionAttempt();
			if (ee == null) {
				LOG.info("Checkpoint triggering task {} of job {} is not being executed at the moment. Aborting checkpoint.",
						tasksToTrigger[i].getTaskNameWithSubtaskIndex(),
						job
Flink CDC(Change Data Capture)是一种用于捕获数据变化的机制,可以将数据变化以事件流的形式传输给Flink流处理程序。而checkpointFlink用来保证数据一致性和容错性的机制,它可以保存流处理程序在某个时刻的状态,以便在发生故障时进行恢复。 在使用Flink CDC时,可能会遇到checkpoint恢复问题。这些问题通常包括如何有效地设置CDC和checkpoint的配置参数,以及如何正确地处理状态恢复过程中的数据变化。例如,在进行checkpoint恢复时,可能会遇到数据重放、状态丢失或者状态一致等问题。 为了解决这些问题,可以考虑以下几个方面: 1. 合理设置CDC和checkpoint的参数。需要根据具体的业务需求和数据特点来设置CDC和checkpoint的参数,例如并行度、checkpoint间隔、超时时间等。 2. 确保数据源的幂等性。通过保证数据源的幂等性,可以避免在数据重放时导致数据错误的问题。 3. 使用恰当的状态后端。Flink提供了同的状态后端,如RocksDB和MemoryStateBackend,同的状态后端对于checkpoint的恢复速度和性能有着同的影响。 除此之外,还可以通过详细的日志录和监控来及时发现问题和进行调优。此外,也可以参考Flink的官方文档和社区讨论,获取更多关于CDC和checkpoint的最佳实践和经验分享。通过这些方法,可以更好地解决Flink CDC checkpoint恢复问题,提高流处理程序的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值