1

背景

需要从 Kafka 0.8.x 版本订阅消息, 然后发送消息到 Kafka 1.0.x 版本中, 其中涉及到了 Kafka 版本冲突的问题, NiFi 很好的解决了这个问题

NiFi 开发人员指南 NiFi Archives (NARs) 章节中有如下说明

When software from many different organizations is all hosted within the same environment, Java ClassLoaders quickly become a concern. If multiple components have a dependency on the same library but each depends on a different version, many problems arise, typically resulting in unexpected behavior or NoClassDefFoundError errors occurring. In order to prevent these issues from becoming problematic, NiFi introduces the notion of a NiFi Archive, or NAR.

以上说明 NiFi 通过将依赖打入 NAR 包, 且不同 NAR 包的 ClassLoader 相互隔离, 然后不同版本的处理器使用不同的 NAR 包, 隔离了依赖, 解决了依赖冲突问题

但是目前使用的 NiFi 1.11.4 版本中, 没有找到 Kafka 8.0.x 相关处理器, 最低支持 Kafka 0.9.x

寻找解决方案

NiFi.rocks 中发现, Nifi 1.10.0 版本中 PutKafka 和 GetKafka 处理器消失了

NiFi 发行说明 中有以下说明

Please note several components that were bundled by default are no longer included due to space limitations. Please see Migration Guidance specifically for moving to 1.10.x.

image

以上说明由于空间限制,有几个默认捆绑的组件在 NiFi 1.10.x 版本的软件包不再默认捆绑, 从 迁移指南 中可以获取到更详细的说明

NiFi 迁移指南 中有以下说明

Migrating from 1.x.x to 1.10.0
We've removed the following nars from the default convenience binary. These include kite-nar, kafka-0-8-nar, flume-nar, media-nar, druid-controller-service-api-nar, druid-nar, other-graph-services-nar. You can still get them from the various artifact repositories and use them in your flows but we cannot bundle them due to space limitations by default.

image

以上说明由于空间限制, kafka-0-8-nar 已经从默认的二进制文件包中删除, 但是可以从 Artifact 仓库获取使用

解决方案

获取 kafka-0-8-nar NAR 包, 放到 NiFi 安装目录下

操作步骤

  1. 获取 nifi-kafka-0-8-nar-1.11.4.nar, 有两种方案
    a. 从 Maven 仓库 下载对应版本的 nifi-kafka-0-8-nar NAR 包
    b. 从源码编译, 编译 nifi-nar-bundles/nifi-kafka-bundle 模块, 找到 nifi-nar-bundles/nifi-kafka-bundle/nifi-kafka-0-8-nar/target/nifi-kafka-0-8-nar-1.11.4.nar
  2. 将 NAR 包放到 NiFi 安装目录的 lib 目录下, 重启 NiFi, 然后我们得到了 Kafka 0.8.x 相关处理器

image


Kense
6 声望1 粉丝

软件研发工程师, Java, Kubernetes, Big Data


引用和评论

0 条评论