创建和使用自定义kafka connect配置提供程序

时间:2019-09-18 14:58:52

标签: apache-kafka apache-kafka-connect

我已经以分布式模式安装并测试了kafka connect,它现在可以正常工作,并且可以连接到配置的接收器并从配置的源中读取。 在这种情况下,我开始改进安装。我认为需要立即注意的一个方面是创建连接器的事实,唯一可用的方法是通过REST调用,这意味着我需要通过电线发送我的信息,不受保护。 为了确保这一点,kafka引入了here中的新ConfigProvider。 这很有用,因为它允许在服务器中设置属性,然后在rest调用中引用它们,如下所示:

{
.
.
"property":"${file:/path/to/file:nameOfThePropertyInFile}"
.
.
}

这真的很好,只需在服务器上添加属性文件,然后在distributed.properties文件上添加以下配置:

config.providers=file   # multiple comma-separated provider types can be specified here
config.providers.file.class=org.apache.kafka.common.config.provider.FileConfigProvider

尽管此解决方案有效,但实际上并不能缓解我对安全性的担忧,因为信息现在已经从通过有线方式传递到现在放置在存储库中,并且文本清晰可见,每个人都可以看到。 kafka团队预见到了此问题,并允许客户端产生自己的实现接口ConfigProvider的配置提供程序。 我创建了自己的实现并将其打包在一个jar中,并给它起了最后的名字:

META-INF/services/org.apache.kafka.common.config.ConfigProvider

,并在分布式文件中添加了以下条目:

config.providers=cust
config.providers.cust.class=com.somename.configproviders.CustConfigProvider

但是我从连接中得到一个错误,指出一个实现ConfigProvider的类,名称为:

com.somename.configproviders.CustConfigProvider
找不到

。 现在我很茫然,因为他们站点上的文档并未明确说明如何很好地配置自定义配置提供程序。

有人在处理类似问题并且可以对此提供一些见识吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我刚刚经历了这些,最近才设置了一个自定义ConfigProvider。官方文档含糊不清,令人困惑。

  

我创建了自己的实现并将其打包在一个jar中,并给它起了最后的名字:   META-INF / services / org.apache.kafka.common.config.ConfigProvider

您可以随意命名jar的最终名称,但需要打包为具有.jar后缀的jar格式。

这是完整的步骤。假设您的自定义ConfigProvider完全限​​定名称为com.my.CustomConfigProvider.MyClass。 1.在目录下创建文件:META-INF / services / org.apache.kafka.common.config.ConfigProvider。文件内容是完整的合格类名:   com.my.CustomConfigProvider.MyClass

  1. 包括您的源代码,并在META-INF文件夹上方以生成Jar包。如果您使用的是Maven,则文件结构看起来像this

  2. 将您的最终Jar文件(例如custom-config-provider-1.0.jar)放在Kafka worker插件文件夹下。默认值为/ usr / share / java。 Kafka worker配置文件中的PLUGIN_PATH。

  3. 也将所有依赖项jar都上传到PLUGIN_PATH。使用jar文件中的META-INFO / MANIFEST.MF文件来配置代码将使用的依赖jar的“ ClassPath”。

  4. 在kafka worker配置文件中,创建两个附加属性:

CONNECT_CONFIG_PROVIDERS: 'mycustom', // Alias name of your ConfigProvider
CONNECT_CONFIG_PROVIDERS_MYCUSTOM_CLASS:'com.my.CustomConfigProvider.MyClass',
  1. 重新启动工作人员

  2. 通过将POST卷曲到Kafka Restful API来更新连接器配置文件。在连接器配置文件中,可以使用以下语法在ConfigData返回的ConfigProvider:get(path, keys)内引用值:

database.password=${mycustom:/path/pass/to/get/method:password}

ConfigData是一个HashMap,其中包含{password:123}

  1. 如果仍然看到ClassNotFound异常,则可能是您的ClassPath设置不正确。

注意: •如果您使用的是AWS ECS / EC2,则需要通过设置环境变量来设置工作程序配置文件。 •worker配置和连接器配置文件不同。