Flink Python API中DataStream.map()函数执行报错求助
问题分析与解决方案
这个错误大概率是Protobuf相关依赖版本不兼容导致的,而非代码使用方式错误,属于Flink 1.16.0 Python API的已知依赖适配问题。
核心原因
Flink Python API内部依赖Protobuf实现算子间的序列化通信,flink_fn_execution_pb2.py中的DESCRIPTOR依赖AddSerializedFile()方法加载序列化文件。当Protobuf版本与Flink 1.16.0要求的版本不匹配时,该方法会返回None,进而导致后续调用message_types_by_name时触发AttributeError。
解决步骤
- 强制安装兼容的Protobuf版本:Flink 1.16.0要求Protobuf版本为3.20.3,执行以下命令:
pip install protobuf==3.20.3 - 清理旧依赖残留:如果之前安装过其他版本的Protobuf,需彻底清理避免冲突:
pip uninstall -y protobuf pip cache purge - 重新安装apache-flink:基于指定的Protobuf版本重装,确保依赖匹配:
pip install apache-flink==1.16.0 --force-reinstall
验证方法
安装完成后,在Python环境中执行以下代码确认Protobuf版本:
import google.protobuf print(google.protobuf.__version__)
确认版本为3.20.3后,重新运行Flink作业即可。
内容的提问来源于stack exchange,提问作者Rinze
相关产品推荐
相关产品推荐

