热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kafka版本不兼容引发TaskExecutor启动故障分析与解决

在本地环境中部署了两个不同版本的Flink集群,分别为1.9.1和1.9.2。近期在尝试启动1.9.1版本的Flink任务时,遇到了TaskExecutor启动失败的问题。尽管TaskManager日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由Kafka版本不兼容引起的。通过调整Kafka客户端配置并升级相关依赖,最终成功解决了这一故障。

问题描述

本地部署过两套flink环境,分别是1.9.1和1.9.2版本。最近在1.9.1版本下启动flink任务时,taskmanager日志正常,但taskexecutor疯狂打印日志,如下

2021-01-23 09:38:41,743 INFO  org.apache.kafka.common.utils.AppInfoParser                   - Kafka version : 0.9.0.1
2021-01-23 09:38:41,743 INFO  org.apache.kafka.common.utils.AppInfoParser                   - Kafka commitId : 23c69d62a0cabf06
2021-01-23 09:38:41,878 INFO  org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase  - Consumer subtask 0 will start reading the following 1 partitions from the committed group offsets in Kafka: [KafkaTopicPartition{topic='billow_ex_hy_live_tglog_barrage_report_test', partition=0}]
2021-01-23 09:38:41,883 INFO  org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase  - Consumer subtask 0 creating fetcher with offsets {KafkaTopicPartition{topic='billow_ex_hy_live_tglog_barrage_report_test', partition=0}=-915623761773}.
2021-01-23 09:38:41,887 INFO  org.apache.flink.runtime.taskmanager.Task                     - Source: kafka-reader-_0 -> Sink: Print to Std. Out (1/1) (7f384a6ac95e594178a601f5ed139ce7) switched from RUNNING to FAILED.
java.lang.Exception: java.lang.IllegalAccessError: tried to access method org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.adjustAutoCommitConfig(Ljava/util/Properties;Lorg/apache/flink/streaming/connectors/kafka/config/OffsetCommitMode;)V from class org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer
        at org.apache.flink.streaming.runtime.tasks.SourceStreamTask$LegacySourceFunctionThread.checkThrowSourceExecutionException(SourceStreamTask.java:217)
        at org.apache.flink.streaming.runtime.tasks.SourceStreamTask.processInput(SourceStreamTask.java:133)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.run(StreamTask.java:301)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:406)
        at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:705)
        at org.apache.flink.runtime.taskmanager.Task.run(Task.java:530)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalAccessError: tried to access method org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.adjustAutoCommitConfig(Ljava/util/Properties;Lorg/apache/flink/streaming/connectors/kafka/config/OffsetCommitMode;)V from class org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer
        at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer.createFetcher(FlinkKafkaConsumer.java:223)
        at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.run(FlinkKafkaConsumerBase.java:695)
        at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:100)
        at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:63)
        at org.apache.flink.streaming.runtime.tasks.SourceStreamTask$LegacySourceFunctionThread.run(SourceStreamTask.java:203)
2021-01-23 09:38:41,889 INFO  org.apache.flink.runtime.taskmanager.Task                     - Freeing task resources for Source: kafka-reader-_0 -> Sink: Print to Std. Out (1/1) (7f384a6ac95e594178a601f5ed139ce7).
2021-01-23 09:38:41,889 DEBUG org.apache.flink.runtime.taskmanager.Task                     - Release task Source: kafka-reader-_0 -> Sink: Print to Std. Out (1/1) network resources (state: FAILED).

但在flink 1.9.2版本下不存在问题,仔细对比两个环境下的taskexecutor启动日志, 发现1.9.1版本的环境taskexecutor加载了很多包,kafka版本也不是目前本地运行的。

跟踪原因,这个是因为之前生产环境的flink集群,各种问题相当垃圾,少了很多依赖包,编译的时候有些要jar打包进去有些要去掉,kafka集群还是上古时代的0.9版本。

为了应付之前的flink实时任务部署上线,所以本地开发测试搭建了了flink 1.9.1 + kafka 0.9的环境,还在flink的lib目录下放了各种所需要的包,还包括kafka 0.9版本的jar包。

(base) leonlai@LEONLAI-MB0 env % ll flink-1.9.1/lib | wc -l     
     131

(base) leonlai@LEONLAI-MB0 env % ll flink-1.9.1/lib | grep kafka
-rw-r--r--    1 leonlai  staff     37610 Aug 11 18:58 flink-connector-kafka-0.9_2.11-1.9.1.jar
-rw-r--r--    1 leonlai  staff    104635 Aug 11 18:58 flink-connector-kafka-base_2.11-1.9.1.jar
-rw-r--r--    1 leonlai  staff    641408 Aug 11 18:58 kafka-clients-0.9.0.1.jar

看下flink 1.9.2环境的 lib目录,很干净

(base) leonlai@LEONLAI-MB0 env % ll flink-1.9.2/lib        
total 269872
drwxr-xr-x@  7 leonlai  staff       224 Jan 24  2020 .
drwxr-xr-x@ 13 leonlai  staff       416 Jan 24  2020 ..
-rw-r--r--@  1 leonlai  staff  96731949 Jan 24  2020 flink-dist_2.11-1.9.2.jar
-rw-r--r--@  1 leonlai  staff  22182626 Jan 24  2020 flink-table-blink_2.11-1.9.2.jar
-rw-r--r--@  1 leonlai  staff  18750846 Jan 24  2020 flink-table_2.11-1.9.2.jar
-rw-r--r--@  1 leonlai  staff    489884 Aug  8  2019 log4j-1.2.17.jar
-rw-r--r--@  1 leonlai  staff      9931 Aug  8  2019 slf4j-log4j12-1.7.15.jar

 但我的代码是基于新生产环境写的,flink 1.9.1以上的版本+kafka 2.2.0版本,所以在旧的环境下跟kafka 0.9版本冲突了。

解决方法


  1. 恢复flink 1.9.1干净环境,把不需要的包备份然后删掉;或者本地切换到flin 1.9.2干净环境即可,建议。
  2. 将代码和本地kafka环境统一切换到0.9版本,不建议。

 

 

 


推荐阅读
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 本文探讨了在QT框架中如何有效遍历文件内容,并解决了一个常见的错误,即文件内容读取为空时弹窗无法正常显示的问题。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
  • 本文详细介绍了在Linux环境下如何有效地管理任务,包括撤销操作、挂起与恢复任务、终止后台程序以及取消定时任务的方法。这些技巧对于提高日常工作效率和系统维护至关重要。 ... [详细]
  • 本文探讨了如何利用System.Diagnostics.Trace作为.NET库中的通用日志记录方法,同时考虑了其在性能关键代码中的影响。 ... [详细]
author-avatar
开心宝2502869253
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有