Could not complete the pending checkpoint xx. Failure reason: Failure to finalize checkpoint

在使用Flink 1.11的一个小版本时,遇到无法完成pending checkpoint的问题,原因是finalize checkpoint阶段出现错误,导致checkpoint协调器的checkpointComplete方法未执行,进而影响自定义实现的代码,如Hudi数据无法commit instant。解决方案是回退相关checkpoint改造的commit。

结论

Flink1.11 某个小版本有 bug,或者当内部改造 checkpoint 的逻辑不完善时也会间接导致该问题。
因为 CheckpointCoordinator#completePendingCheckpoint 方法中会先 finalizeCheckpoint,然后再 sendAcknowledgeMessages 中去触发 coordinator.checkpointComplete。外部应用(用户最常自定义实现的部分)会在 coordinator.checkpointComplete 中做一些自定义实现。 但是此时 finalizeCheckpoint 方法中就出错了,所以不会执行 coordinator.checkpointComplete,用户实现的代码不会执行,因此产生了不符合预期的操作。
Flink revert 相关 cp 改造的 commit 后恢复正常。

背景

Flink 版本升级后作业重启能够正常完成 checkpoint,但是在 jobmanager 日志中发现报错信息:

2022-09-14 15:06:06,725 WARN  org.apache.flink.runtime.jobmaster.JobMaster jobmanager-future-thread-3 [
<think>好的,用户遇到了上游连接错误或断开重置的问题,具体错误信息包括“upstream connect error or disconnect/reset before headers”、“transport failure reason: TLS error: CERTIFICATE_VERIFY_FAILED”以及“delayed connect error 111”。需要帮助解决这些问题,特别是在Envoy中出现的远程连接故障。 首先,我需要理解这些错误的具体含义。根据引用[1]和[2],这些错误通常与上游服务连接失败有关,可能涉及TLS证书验证失败、网络问题或配置错误。用户提到的“delayed connect error 111”可能对应Linux系统的连接被拒绝错误,即ECONNREFUSED。 接下来,我需要逐步分析可能的原因并提供解决方案。首先检查TLS证书问题,因为引用[2]提到SSL证书验证失败。这可能是因为证书过期、配置错误或客户端不信任CA。然后,网络连通性方面,需要确认上游服务是否可达,端口是否正确,防火墙是否阻止连接。延迟错误111可能说明服务未运行或端口监听有问题。 另外,Envoy的配置是否正确也很关键,比如集群定义、超时设置和重试策略。可能用户配置的上游地址错误或TLS设置不匹配。此外,资源限制如文件描述符不足也可能导致连接失败。最后,服务健康状态和负载情况也需要检查,是否服务过载或健康检查失败。 针对这些可能性,我需要给出具体的解决步骤,比如验证证书、检查网络连接、核对Envoy配置、调整资源限制等。同时,提供示例配置有助于用户实际操作。可能还需要指导用户如何测试和验证每一步的修复情况,比如使用openssl检查证书,用telnet测试端口连通性,或者调整Envoy日志级别获取更多信息。 最后,生成相关问题可以帮助用户进一步排查其他潜在问题,例如TLS握手失败的更多原因,Envoy重试机制,或者连接拒绝的其他可能性。确保用户能够全面理解问题,并自主进行深入排查。</think>### 逐步解决方案:upstream connect error/disconnect/reset before headers #### 一、问题定位与常见原因 1. **TLS证书验证失败** - 错误`TLS error: 268435581:CERTIFICATE_VERIFY_FAILED`表明Envoy无法验证上游服务的证书[^2]。可能原因包括: - 上游服务证书过期或自签名证书未添加到Envoy信任链 - Envoy配置未正确启用TLS验证(如`trusted_ca`未指定) - SNI(Server Name Indication)配置不匹配 2. **网络连接问题** - `delayed connect error 111`对应Linux系统的`ECONNREFUSED`错误,表示目标服务未监听指定端口或防火墙阻止连接[^1] - 网络延迟或上游服务过载导致超时 3. **Envoy配置错误** - 集群定义中的endpoint地址/端口错误 - 未正确配置连接池参数(如`max_connections`过小) - 未设置合理的超时参数(如`idle_timeout`) #### 二、具体解决步骤 1. **验证TLS证书链** ```bash # 手动测试证书验证(替换为实际地址和端口) openssl s_client -connect upstream_service:443 -showcerts ``` - 检查输出是否包含`Verify return code: 0 (ok)` - 若使用自签名证书,需将CA证书添加到Envoy的`transport_socket`配置: ```yaml transport_socket: name: envoy.transport_sockets.tls typed_config: "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext common_tls_context: validation_context: trusted_ca: filename: "/etc/envoy/ca.crt" ``` 2. **检查网络连通性** - 确认上游服务监听状态: ```bash # 在上游服务器执行 netstat -tuln | grep <port> ``` - 测试基础连接: ```bash telnet upstream_ip upstream_port # 或使用更专业的工具 nc -zv upstream_ip upstream_port ``` 3. **优化Envoy配置** - 调整连接池参数防止资源耗尽: ```yaml clusters: - name: upstream_cluster connect_timeout: 1s type: STRICT_DNS load_assignment: {...} circuit_breakers: thresholds: - priority: DEFAULT max_connections: 1000 max_pending_requests: 5000 typed_extension_protocol_options: envoy.extensions.upstreams.http.v3.HttpProtocolOptions: "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions explicit_http_config: http2_protocol_options: {} ``` 4. **处理延迟连接错误111** - 确认上游服务进程状态: ```bash systemctl status your_service ``` - 检查防火墙规则: ```bash iptables -L -n -v | grep DROP ``` #### 三、调试工具使用 1. **Envoy日志分析** 启用详细日志: ```yaml admin: access_log_path: "/dev/null" address: socket_address: address: 0.0.0.0 port_value: 9901 ``` 2. **访问日志分析** 配置访问日志格式以捕获更多信息: ```yaml http_filters: - name: envoy.filters.http.router typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router dynamic_stats: true access_log: - name: envoy.access_loggers.file filter: not_health_check_filter: {} typed_config: "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog path: "/dev/stdout" format: "[%START_TIME%] %REQ(:AUTHORITY)% %RESPONSE_CODE% %RESPONSE_FLAGS%\n" ``` #### 四、典型配置示例 ```yaml clusters: - name: secure_upstream connect_timeout: 5s type: STRICT_DNS dns_lookup_family: V4_ONLY load_assignment: cluster_name: secure_upstream endpoints: - lb_endpoints: - endpoint: address: socket_address: address: upstream.service port_value: 443 transport_socket: name: envoy.transport_sockets.tls typed_config: "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext common_tls_context: validation_context: match_subject_alt_names: - exact: "upstream.service" trusted_ca: filename: "/etc/envoy/tls/ca.crt" ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值