如何在kafka生产者jar中使用AWS_MSK_IAM sasl机制



我有一个名为生产者的胖罐子,它可以产生消息。我想用它来生成到MSK无服务器集群的消息。jar接受以下参数-

-topic --num-records  --record-size  --throughput --producer.config /configLocation/

由于我的MSK无服务器集群使用基于IAM的身份验证,我在producer.config-中提供了以下设置

bootstrap.servers=boot-url
security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

这个jar的工作方式通常是通过sasl.jaas.config属性提供用户名和密码。

但是,对于MSK无服务器,我们必须使用附加到EC2实例的IAM角色。

当我使用执行当前jar时

java - jar producer.jar -topic --num-records  --record-size  --throughput --producer.config /configLocation/

我得到了异常

Exception in thread "main" org.apache.kafka.common.config.ConfigException: Invalid value software.amazon.msk.auth.iam.IAMClientCallbackHandler for configuration sasl.client.callback.handler.class: Class software.amazon.msk.auth.iam.IAMClientCallbackHandler could not be found.

我不明白如何让生产者jar找到外部jar中存在的类aws-msk-iam-auth-1.1.1-all.jar.

任何帮助都将不胜感激,谢谢。

我发现在jar的情况下,使用命令行选项(如--cp(不可能覆盖MANIFEST.MF中指定的类路径。在我的案例中起作用的是让jar的pom包含缺失的依赖项。

当您使用-jar命令行选项以可执行JAR,则Java CLASSPATH环境变量将忽略,并且-cp和-classpath开关也将被忽略,在这种情况下,您可以在META-INF/MMANIFEST.MF文件。

https://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html

最新更新