spark消费kafka(cdh启用kerberos)

4 篇文章 0 订阅
不生产博客,只是别人博客的裁缝
一入kerberos深似海,从此节操是个玩意儿

之前写过一篇spark消费kafka问题记录(cdh5.16.2),主要记录了安装spark2后,spark的问题,和本地可以执行,而一提集群缺包的问题,这篇主要记录下启用kerberos后的一些问题

版本信息如下

集群启用kerberos后,想用命令行测下kafka

kafka-topics --create --zookeeper ip:port --replication-factor 1 --partitions 1 --topic test

创建成功,虽然没有kinit 

然后命令行模拟生产消费

kafka-console-producer --broker-list ip:port --topic test

kafka-console-consumer --bootstrap-server ip:port --topic test

 

生产者那刚输了个字符串然后回车,都报下面的错

 WARN clients.NetworkClient: Bootstrap broker host:9092 (id: -3 rack: null) disconnected

 WARN clients.NetworkClient: Bootstrap broker host:9092 (id: -1 rack: null) disconnected

 WARN clients.NetworkClient: Bootstrap broker host:9092 (id: -2 rack: null) disconnected

然后网上搜,解决办法是这样的

7180 kafka搜security.inter.broker.protocol,默认是第二个,改为SASL_PLAINTEXT

 然后创建两个文件client.properties、jaas.conf

 

添加环境变量:

export KAFKA_OPTS="-Djava.security.auth.login.config=/home/cdh/kafka/jaas.conf"

然后记得kinit下,哪个用户都可以,反正没acl,不kinit会报错,报错信息如下

 

javax.security.auth.login.LoginException: Could not login: the client is being asked for a password, but the Kafka client code does not currently support obtaining a password from the user. not available to garner  authentication information from the user

 

Could not login: the client is being asked for a password, but the Kafka client code does not currently support obtaining a password from the user. not available to garner  authentication information from the user

 

然后加参数,继续执行,不报错了

 

kafka-console-producer --broker-list ip:port --topic test --producer.config /home/cdh/kafka/client.properties

kafka-console-consumer --bootstrap-server ip:port --topic test --consumer.config /home/cdh/kafka/client.properties

 

 

然后再说spark消费kafka,代码中需添加如下:

 def main(args: Array[String]): Unit = {
    //System.setProperty("java.security.krb5.conf", "C:\\ProgramData\\MIT\\Kerberos5\\krb5.ini")
    //System.setProperty("java.security.auth.login.config", "C:\\temp\\jass.conf")
    System.setProperty("java.security.krb5.conf", "/etc/krb5.conf")
    System.setProperty("java.security.auth.login.config", "/home/cdh/kakfa/jaas.conf")
    .....
}

因为我在本地测试,所以注释掉的前两行是本地测试用的,然后kafka的参数也需要添加

    val kafkaParams = Map[String, Object](
      "bootstrap.servers" -> "ip:port",
      "key.deserializer" -> classOf[StringDeserializer],
      "value.deserializer" -> classOf[StringDeserializer],
      "group.id" -> "zlq_test",
      "auto.offset.reset" -> "earliest",
      "security.protocol" -> "SASL_PLAINTEXT",//需要添加
      "sasl.kerberos.service.name" -> "kafka",//需要添加
      "enable.auto.commit" -> (false: java.lang.Boolean)
    )

记得本地测试或者提交集群的时候,记得kinit,本地的登陆下,get Ticket

win版kerberos的安装可以看我后面写的博客

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark可以使用两种方式来消费Kafka数据:基于receiver的方式和基于direct的方式。基于receiver的方式是使用Kafka的高阶API来在ZooKeeper中保存消费过的offset,这种方式可以保证数据的高可靠性,但不能保证数据被处理一次且仅一次。因为Spark和ZooKeeper之间可能不同步。而基于direct的方式则使用Kafka的简单API,Spark Streaming自己负责追踪消费的offset,并保存在checkpoint中。这种方式可以保证数据被消费一次且仅消费一次。大多数生产环境中使用的是基于direct的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SparkStreaming消费Kafka的方式](https://blog.csdn.net/u011095039/article/details/126076035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SparkStreaming消费Kafka的两种方式](https://blog.csdn.net/dudadudadd/article/details/114402955)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值