【技术分享】fluentd对接kafka + sasl_ssl plain 认证方式案例

文章目录

    • 引言
    • 一、kafka & kafka的 sasl_plain sasl_ssl配置方案:
    • 二、Fluentd (td-agent) & kafka的 sasl_plain sasl_ssl配置方案:
    • 总结

引言

td-agent 自带的插件kafka2 和 rdkafka2 可以支持其输出消息到kafka, 这篇文章主要输出一个fluentd对接kafka + sasl_ssl plain 认证方式案例指导。
背景:
华为云的kafka 服务已经配置 sasl plain 的认证方式 + sasl_ssl 的通信方式,fluentd应该如何配置才能对接kafka并发送消息?

困难点:
网络上对于这种认证方式的介绍比较少,因此总结一个配置案例输出分享。

一、kafka & kafka的 sasl_plain sasl_ssl配置方案:

  1. 首先需要再华为云控制台上下载 kafka 的证书文件, 一共会下载两个证书文件,jks格式和crt格式。
    这两个文件有什么关系呢?
    答: 这两个文件都是证书文件, 其中jks文件是针对java语言连接实例时候使用的证书格式。
  2. 在kafka客户端进行如下配置

在Kafka命令行工具的“/config”目录中找到“consumer.properties”和“producer.properties”文件,并分别在文件中增加如下内容。

sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="**********" \
password="**********";        
sasl.mechanism=PLAIN

security.protocol=SASL_SSL
ssl.truststore.location=/opt/kafka_2.11-2.3.0/config/client.jks
ssl.truststore.password=********
ssl.endpoint.identification.algorithm=

参数说明:

  • username和password为创建Kafka实例过程中开启SASL_SSL时填入的用户名和密码,或者创建SASL_SSL用户时设置的用户名和密码。
  • ssl.truststore.location配置为client.jks证书的存放路径。注意,Windows系统下证书路径中也必须使用“/”,不能使用Windows系统中拷贝路径时的“\”,否则客户端获取证书失败。
  • ssl.truststore.password为服务器证书密码,不可更改。
  • ssl.endpoint.identification.algorithm为证书域名校验开关,为空则表示关闭。这里需要保持关闭状态,必须设置为空。

使用如下消息进行生产

./kafka-console-producer.sh --broker-list ${连接地址} --topic ${Topic名称} --producer.config ../config/producer.properties

二、Fluentd (td-agent) & kafka的 sasl_plain sasl_ssl配置方案:

直接寻找相关的解决方案比较少, 并且对于rdkafka的配置项了解较少的情况下, 很难知道正确的配置方法。

在查询配置方案过程中, 主要参考了两个文档

  1. 在下面的链接中了解到 rdkafka2插件中 可以使用 rdkafka_options 配置具体的sasl认证信息
    https://github.com/fluent/fluent-plugin-kafka/issues/414

  2. rdkafka 中所有支持的配置信息可以参考:
    https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md

  • 最终的配置方案为:
-topic>
  @type rdkafka2
  brokers ip:port,ip:port,ip:port
  rdkafka_options { 
        "log_level" : 7,
        "request.timeout.ms": 5000,
        "security.protocol": "sasl_ssl",
        "ssl.ca.location": "这里填写crt 证书文件的路径, 需要注意文件权限",
        "sasl.mechanism": "PLAIN",
        "sasl.username":     "这里填写sasl的用户名",
        "sasl.password": "这里填写sasl的密码"
      }
  >
    @type json
  >
  topic_key test-topic
  default_topic test-topic
>

总结

经过大量查阅资料与验证得出的方案,也是不容易, 如果这篇文章对您有帮助,请点个关注吧~

你可能感兴趣的:(技术分享,kafka,ssl,分布式)