热门标签 | 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版本,不建议。

 

 

 


推荐阅读
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
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社区 版权所有