You need to enable JavaScript to run this app.
导航
使用 SASL_SSL 接入点连接实例
最近更新时间:2024.06.05 17:00:30首次发布时间:2022.07.05 10:18:17

本文介绍通过 SASL_SSL 接入点连接 Kafka 实例,进行消息生产和消息消费的操作步骤。

背景信息

消息队列 Kafka版通过 SASL_SSL 接入点提供多重安全保障的访问方式,选择该接入点连接实例时,数据需要通过 SASL_PLAIN 协议鉴权与 SSL 证书认证。

  • SASL_PLAIN 协议鉴权表示 Kakfa 客户端需要通过 SASL 用户名及密码鉴权后才能访问 Kafka 实例。消息队列 Kafka版提供 PLAIN 机制和 SCRAM 机制供您访问和接入,创建实例时可以同步创建 SASL 用户,您也可以在创建实例后按需创建 SASL 用户,并授予其读写数据的权限,在访问实例时可使用对应的 SASL 用户账密进行权限认证。
  • 消息队列 Kafka版支持通过 SSL 证书对消息进行鉴权和加密,保障数据传输过程的安全性,防止数据在网络传输过程中被截取或者窃听,相较于普通访问方式具备更高的安全性。目前支持客户端对服务端证书的单向认证。

注意事项

使用 SASL_SSL 接入点连接 Kafka 实例,会通过 SSL 证书对消息进行鉴权和加密,建议您为 Kafka 实例开通公网访问,使用公网访问地址连接实例。
目前私网访问 Kafka 实例无法通过证书校验,会提示类似certificate verify failed的报错信息。
私网访问 Kafka 实例,实际是使用 IP 进行业务访问,而 IP 是一个可变的地址,无法在证书里面固定配置。如果您确认要在私网环境通过 SASL_SSL 接入点连接 Kafka 实例,请在客户端添加ssl.endpoint.identification.algorithm=配置,以跳过证书域名校验。

前提条件

  • 已获取 SASL_SSL 接入点信息,包括连接地址和端口号。详细信息请参考查看接入点
  • 已创建 Topic。操作步骤请参考创建 Topic
  • 通过 SASL_SSL 接入点连接 Kafka 实例,需要提前为实例开通公网访问,并建议实例绑定的 EIP 带宽上限大于预估的公网业务流量峰值。详细信息请参考配置公网访问
  • 环境中已成功安装 JDK、配置环境变量,并下载了 Kafka 开源客户端,例如 Kafka 2.2.2 客户端

配置鉴权

在 Kafka 客户端包的 ./config 目录中,修改 consumer.propertiesproducer.properties 文件。 请根据 SASL 机制类型,分别在文件中增加以下内容:

注意

使用 SASL_SSL 接入点连接 Kafka 实例,建议您为 Kafka 实例开通公网访问,使用公网访问地址连接实例。
如果您使用私网地址连接实例,除以下需要增加的内容外,还需要额外增加ssl.endpoint.identification.algorithm=配置,以跳过证书域名校验。

  • 使用 PLAIN 机制时:
    consumer.propertiesproducer.properties 文件中增加以下内容。其中 usernamepassword 须填写 PLAIN 用户的用户名和密码。

    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="{$plainusername}" password="{$plainpwxxx}";        
    sasl.mechanism=PLAIN
    
    security.protocol=SASL_SSL
    
  • 使用 SCRAM-SHA-256 机制时:
    consumer.propertiesproducer.properties 文件中增加以下内容。其中 usernamepassword 须填写 SCRAM 用户的用户名和密码。

    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="{$scramusername}" password="{$scrampw}";        
    sasl.mechanism=SCRAM-SHA-256
    
    security.protocol=SASL_SSL
    

各字段说明如下,详细的配置文件说明请参考配置文件

字段

说明

username

SASL 用户名。

  • PLAIN 机制下,此处应设置为创建实例时指定的 PLAIN 用户名。
  • SCRAM 机制下,此处应设置为 SCRAM 用户的用户名。

password

SASL用户密码。

  • PLAIN 机制下,此处应设置为创建实例时指定的 PLAIN 用户密码。
  • SCRAM 机制下,此处应设置为 SCRAM 用户的用户密码。

security.protocol

协议名称。此处应指定为 SASL_SSL。

ssl.endpoint.identification.algorithm

可选参数。
如果您使用私网地址连接实例,必须配置此参数为空字符串,以跳过证书域名校验。
私网访问 Kafka 实例,实际是使用 IP 进行业务访问,而 IP 是一个可变的地址,无法在证书里面固定配置。如果私网连接实例没有跳过证书校验,将会提示类似certificate verify failed的报错信息。

生产消息

  1. 解压 Kafka 客户端文件。

  2. ./bin 目录下,打开终端。

  3. 执行以下命令启动生产者,开始生产消息。

    bash kafka-console-producer.sh --broker-list ${SASL_SSL接入点} --topic ${Topic名称}  --producer.config ../config/producer.properties
    

    参数

    说明

    SASL_SSL 接入点

    控制台实例详情页面获取的 SASL_SSL 接入点的域名和端口号。

    Topic 名称

    Kafka 实例的 Topic 名称。

  4. 输入需要生产的消息内容,按回车键发送此消息到 Kafka 实例。 光标下输入的每一行内容都将封装到消息中发送到 Kafka 实例。如需停止生产,可以使用 Ctrl+C 命令退出消息生产。

    [root@kafkaecs bin]# bash kafka-console-producer.sh --broker-list kafka-cnngc7an0qp****.kafka.volces.com:9493 --topic mytopic --producer.config ../config/producer.properties
    >Hello world!
    >This is a Kafka message!
    >^C[root@kafkaecs bin]#
    

消费消息

  1. 打开另一个终端,执行如下命令消费消息。
    如需停止消费,可以使用 Ctrl+C 命令退出消息消费。

    bash kafka-console-consumer.sh --bootstrap-server ${SASL_SSL接入点}  --topic ${Topic名称} --group ${消费组名称} --from-beginning --consumer.config ../config/consumer.properties
    

    参数

    说明

    SASL_SSL 接入点

    控制台实例详情页面获取的 SASL_SSL 接入点的域名和端口号。

    Topic名称

    Kafka 实例的 Topic 名称。

    消费组名称

    自定义的消费组名称。
    如果您已在配置文件中指定了消费组名称,请确认命令行中配置了相同的名称,否则可能导致消费失败。

  2. 成功操作后,消费者可以收到生产者发送的消息,内容与生产端的消息相同。

    [root@kafka bin]# bash kafka-console-consumer.sh --bootstrap-server kafka-cnngc7an0qpv****.kafka.volces.com:9493 --topic mytopic --group grouptest --from-beginning --consumer.config ../config/consumer.properties
    Hello world!
    This is a Kafka message!
    ^CProcessed a total of 2 messages
    [root@kafka bin]#