Flink和Spark程序读写kafka的Kerberos认证

一、自身的认证配置

1.Flink自身自动刷新kerberos认证的配置:

flink run-application \
  -t yarn-application \
  -Dsecurity.kerberos.login.keytab=/path/to/local/user.keytab \
  -Dsecurity.kerberos.login.principal=user@HADOOP.COM
  ./examples/streaming/TopSpeedWindowing.jar

Flink实现了给connector自动添加kerberos票据的机制,所以同一个集群内,只需要以上参数,就可以,connector不再需要单独的keytab去刷新认证。

2.Spark自身自动刷新kerberos认证的配置:

spark-submit \
 --principal user@HADOOP.COM \
 --keytab /path/to/local/user.keytab \
  ...

spark这个keytab只能给自身和hive、hbase提供认证。如果需要给其他组件比如Kafka认证,就需要自己实现org.apache.spark.security.HadoopDelegationTokenProvider,将实现类名字写入META-INF/services文件里,如果不自己实现参考下一案例,来实现kafka的kerberos认证

二、自有kafka集群的kerberos认证

1.Flink读写kafka认证

由于Flink实现自动添加kerberos认证,所以只需要指定:
-Dsecurity.kerberos.login.contexts=KafkaClient
就可以实现Kafka的jaas认证,如果zookeeper也开启了认证,就指定:
-Dsecurity.kerberos.login.contexts=Client,KafkaClient
这个参数可以直接配置到flink.yaml或者最新版的config.yaml里,就不用再在程序里指定了。
其他认证参数就参考connector里的配置参数就行了。
比如:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka

2.Spark读写kafka认证

Spark由于没有默认的实现,可以通过指定keytab的方式来实现kerberos认证

sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
    useKeyTab=true \
    storeKey=true  \
    keyTab="user_kafka.keytab" \
    principal="user@HADOOP.COM";

这里需要注意的是,由于kafka认证需要的keytab是在executor端,所以需要通过–files参数来提交keytab文件,自动分发到所有executor的工作目录里,所以sasl.jaas.config里只需要指定文件名称就可以,不需要把所有nodemanager节点都手动放一份keytab文件,有些同学不懂–files原理,经常干这事。

提交参数样例如下:

spark-submit \
 --principal user@HADOOP.COM \
 --keytab /path/to/local/user.keytab \
 --files /path/to/local/user_kafka.keytab \
 ...

注意虽然user.keytab和user_kafka.keytab名字不同,实际是同一个文件,因为–files会和–keytab参数冲突,所以要复制一份不同名字的keytab给kafka实用。

三、跨集群读写两个不同kerberos认证的kafka

1.Flink的kafka认证

这种场景下,由于需要用到不同的keytab来进行kafka认证,所以,理论上需要禁用flink自身对kafka生成的认证,转而使用跟spark类似的方式,将两个keytab文件分发到所有taskmanager节点进行认证,这个时候就需要使用flink里跟spark的–files类似的参数,也就是-Dyarn.ship-files=/path/to/local/user1.keytab,/path/to/local/user2.keytab
然后,在consumer和producer的配置参数中使用sasl.jaas.config配置keytab认证。此处不再举例,可以参看以上Spark的配置。

2.Spark的kafka认证

spark的认证就没有特殊的地方了,参考以上Spark读写单集群的kafka的配置,将两个keytab文件都在–files里指定,然后分别配置sasl.jaas.config就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值