flink sql1.18.0连接SASL_PLAINTEXT认证的kafka3.3.1

阅读此文默认读者对docker、docker-compose有一定了解。

环境

docker-compose运行了一个jobmanager、一个taskmanager和一个sql-client。

如下:

version: "2.2"
services:
  jobmanager:
    image: flink:1.18.0-scala_2.12
    container_name: jobmanager
    ports:
      - "7081:8081"
    command: jobmanager
    volumes:
      - ./jobmanager:/opt/flink
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager

  taskmanager:
    image: flink:1.18.0-scala_2.12
    container_name: taskmanager1
    depends_on:
      - jobmanager
    command: taskmanager
    volumes:
      - ./taskmanager1:/opt/flink
    scale: 1
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 32
  sql-client:
    image: flink:1.18.0-scala_2.12
    container_name: sql-client-1
    command: bin/sql-client.sh
    volumes:
      - ./sql-client:/opt/flink
    depends_on:
      - jobmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        rest.address: jobmanager

注意三个容器都映射了/opt/flink目录。需要先将/opt/flink目录拷贝到跟docker-compose.yml同一目录下,并分别重命名,如下图:

三个文件夹内容是一样的,只是名字不一样。

以上环境介绍完毕。

添加fllink-connector-kafka驱动

在maven官网下载相应jar包,分别放入上述三个文件夹的lib目录下。例如jobmanager:

启动sql-client,我用docker-compose启动的,因此命令为:docker-compose run sql-client.

创建kafka表

CREATE TABLE TestTable (
  `event_time` TIMESTAMP(3) METADATA FROM 'timestamp',
  `partition` BIGINT METADATA VIRTUAL,
  `offset` BIGINT METADATA VIRTUAL,
  `presetBit` STRING,
  `imageTime` STRING,
  `imageName` STRING,
  `thumbnailWidth` BIGINT,
  `size` BIGINT,
  `thumbnailSize` BIGINT,
  `behavior` STRING,
  `imageUri` STRING,
  `presetId` STRING
) WITH (
  'connector'='kafka',
  'topic'='mytopic',
  'properties.bootstrap.servers'='localhost:9092',
  'properties.group.id'='testGroup',
  'scan.startup.mode'='earliest-offset',
  'format'='json',
  'properties.security.protocol'='SASL_PLAINTEXT',
  'properties.sasl.mechanism'='PLAIN',
  'properties.sasl.jaas.config'='org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="your-username" password="your-pwd";'
);

说明:

①标识字段为kafka自带字段,topic中没有也会自带。

②标识的字段为topic中存储的字段,根据自己topic来。

③为自己的topic名称

④为kafka集群地址

⑤后面的username和password需要根据实际情况修改。

创建表以后执行select * from TestTable,可以看到类似下图的内容:

flink官网留下的坑

坑主要出现在最后一行。

flink官网是这样写的

首先指定的类不对,应该是org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule,如果按照官网写会报错:Caused by: javax.security.auth.login.LoginException: No LoginModule found for org.apache.kafka.common.security.plain.PlainLoginModule。

其次,username和password的双引号不需要写反斜杠,写反斜杠反而会报错。

Flink中使用Kafka时启用SASL_PLAINTEXT身份验证,需要进行以下配置: 1.Flink的配置文件中添加以下Kafka相关的配置: ``` # Kafka security protocol security.protocol=SASL_PLAINTEXT # SASL mechanism sasl.mechanism=PLAIN # Kerberos service name sasl.kerberos.service.name=kafka # JAAS configuration file path sasl.jaas.config=/path/to/jaas.conf ``` 其中,`security.protocol`指定了使用SASL_PLAINTEXT协议进行安全连接,`sasl.mechanism`指定了使用PLAIN机制进行身份验证,`sasl.kerberos.service.name`指定了Kafka使用的Kerberos服务名称,`sasl.jaas.config`指定了JAAS配置文件的路径。 2. 在JAAS配置文件中添加以下内容: ``` KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/path/to/keytab" storeKey=true useTicketCache=false serviceName="kafka" principal="user@EXAMPLE.COM"; }; ``` 其中,`KafkaClient`是JAAS配置文件中的一个应用程序名称,`com.sun.security.auth.module.Krb5LoginModule`指定了使用Kerberos认证,`useKeyTab`指定了使用keytab文件进行认证,`keyTab`指定了keytab文件的路径,`storeKey`指定了是否将加密后的密钥存储在缓存中,`useTicketCache`指定了是否缓存Kerberos票据,`serviceName`指定了Kafka使用的Kerberos服务名称,`principal`指定了用于Kerberos认证的用户主体名称。 3.Flink应用程序中使用Kafka时,需要在Kafka相关的配置中添加以下内容: ``` Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "kafka:9092"); properties.setProperty("security.protocol", "SASL_PLAINTEXT"); properties.setProperty("sasl.mechanism", "PLAIN"); properties.setProperty("sasl.kerberos.service.name", "kafka"); properties.setProperty("sasl.jaas.config", "/path/to/jaas.conf"); ``` 其中,`bootstrap.servers`指定了Kafka的启动服务器地址,其他配置项与上述步骤中的配置相同。 完成以上配置后,即可在Flink中使用Kafka进行SASL_PLAINTEXT身份验证。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值