storm 访问 kerberos kafka

本文整理下hdp中开启了kerberos后在storm中访问的kafka所遇到的问题。
测试使用的环境为: hdp2.6.0.3 storm 1.1.0, kafka 0.10.1 ,前置条件是开启了kerberos

1 环境准备

集群开启kerberos后,创建kafka topic,注意需要kinit 所需用户的keytab 比如:
klist -k /etc/security/keytabs/storm.headless.keytab ocdp-clusteraa@ASIAINFO.COM
./kafka-topics.sh --create --topic inputTopicStorm  --zookeeper host-10-1-236-128:2181 --partitions 3 --replication-factor 1
./kafka-topics.sh --create --topic outputTopicStorm  --zookeeper host-10-1-236-128:2181 --partitions 3 --replication-factor 1

创建完topic后,进行一些简单的kafka数据读写测试,向对应的topic中写入数据,命令行是否可以读取成功:

./kafka-console-producer.sh  --topic inputTopicStorm --broker-list host-10-1-236-128:6667 --security-protocol PLAINTEXTSASL

./kafka-console-consumer.sh --new-consumer --topic inputTopicStorm --bootstrap-server host-10-1-236-128:6667 --security-protocol PLAINTEXTSASL --from-beginning

上述命令如果可以正常执行,说明kerberos环境正常。如果遇到权限问题,见文末的kafka权限命令。

2 storm kafka 测试代码

注意支持kerberos的api 最低从kafka0.9开始,需要用新的API,需要传递的参数如下:

 Properties props = new Properties();
        props.put("bootstrap.servers", "host-10-1-236-128:6667,host-10-1-236-129:6667,host-10-1-236-130:6667");
        props.put("acks", "1");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("security.protocol", "SASL_PLAINTEXT");

        KafkaSpoutConfig<String, String> kafkaSpoutConfig = KafkaSpoutConfig
                .builder(props.getProperty("bootstrap.servers"), "foo")
                .setGroupId("KafkaStormGroupID")
                .setProp(props)
                .setRecordTranslator((r) -> new Values(r.topic(), r.key(), r.value()), new Fields("topic", "key", "message"))
                .build();

注意,根据kafka 0.10.2 的feature Dynamic JAAS configuration for Kafka clients jaas 配置文件的内容已经可以直接写在代码中了,参考原版本代码的实现 https://github.com/pvillard31/storm-kafka-kerberos
为了做到基础组件的透明,避免所有应用实现时都需要指定一遍kerberos的详细访问信息,这里还是采用了旧的方式,即ambari已经写入到了storm每个supervisor节点的/usr/hdp/current/storm-supervisor/conf/storm_jaas.conf文件中。正确的版本为:

KafkaClient {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="/etc/security/keytabs/storm.headless.keytab"
   storeKey=true
   useTicketCache=false
   serviceName="ocdp"
   principal="ocdp-clusteraa@ASIAINFO.COM";
};

4 开源版本storm的配置

在开源版本中,缺少了ambari的角色,需要我们自己修改storm.yaml,加入以下配置:

java.security.auth.login.config : '/data/storm/apache-storm-1.1.1/conf/storm_jaas.conf'
worker.childopts : '-Djava.security.auth.login.config=/data/storm/apache-storm-1.1.1/conf/storm_jaas.conf'

这样worker中就会有java.security.auth.login.config

5 安全模式ZK问题:

注意如果需要连接安全模式ZK:
storm.yaml中需要加上
supervisor.childopts : '-Djava.security.auth.login.config=/data/storm/apache-storm-1.1.1/conf/storm_jaas.conf '
并且storm_jaas.conf中也需要加上zk的安全配置:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/opt/apache-storm-1.1.1/conf/storm.headless.keytab"
storeKey=true
useTicketCache=false
serviceName="zookeeper"
principal="ocdp-clusteraa@ASIAINFO.COM";
};

6 kafka权限问题:

使得ocsp用户对topic的所有权限
./kafka-acls.sh --add --allow-principal user:ocsp --operation ALL --topic inputTopicStorm --authorizer-properties zookeeper.connect=host-10-1-236-128:2181
使得ocsp用户能够使用任意的groupID来消费所有的topic
./kafka-acls.sh --authorizer-properties zookeeper.connect=host-10-1-236-128:2181 --allow-principal user:ocsp --consumer --topic=* --group=* --add

7 常见错误:

1. 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

该问题是jaas config 配置有误

2. 较低版本的HDP、kafka

如果在/usr/hdp/current/storm-supervisor/conf/storm_jaas.conf文件中没有KafkaClient字段,需要自行加入
详见: https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.4.2/bk_storm-user-guide/content/stormkafka-secure-config.html

3 Storm开启kerberos后 UI访问较为麻烦的问题

通过Ambari 创建一个 Storm View, 在新建的Storm View中就可以直接访问Storm UI了。
详见 https://docs.hortonworks.com/HDPDocuments/Ambari-2.4.0.0/bk_ambari-views/content/creating_the_storm_view_instance.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • ** 今天看了一下kafka官网,尝试着在自己电脑上安装和配置,然后学一下官方document。** Introd...
    RainChang阅读 4,980评论 1 30
  • 环境: 系统:centos7ps: 请确认kafka,zookeeper,storm部署完成(本文基于Apache...
    jason_李阅读 2,185评论 0 1
  • 最近在HDP2.6的环境里尝试了Kerberos,在各组件运行正常的情况下最终成功运行spark-streamin...
    杨光明子阅读 7,850评论 3 11
  • 目录 场景假设 调优步骤和方法 Storm 的部分特性 Storm 并行度 Storm 消息机制 Storm UI...
    mtide阅读 16,976评论 30 60