引言

随着在CDH平台上物联网(IoT)使用案例的不断增加,针对这些工作负载的安全性显得至关重要。本篇博文对如何以安全的方式在Spark中使用来自Kafka的数据,以及针对物联网(IoT)使用案例的两个关键组件进行了说明。

Cloudera Distribution of Apache Kafka 2.0.0版本(基于Apache Kafka 0.9.0)引入了一种新型的Kafka消费者API,可以允许消费者从安全的Kafka集群中读取数据。这样可以允许管理员锁定其Kafka集群,并要求客户通过Kerberos进行身份验证。此外,也可以允许客户在与Kafka brokers(通过SSL/TLS)通信时加密数据随后,在Cloudera Distribution of Apache Kafka 2.1.0版本中,Kafka通过Apache Sentry引入了支持授权功能。这样可以允许Kafka管理员锁定某些主题,并针对特定角色和用户授予权限,充分发挥基于角色的访问控制功能。

而现在,从Cloudera Distribution of Spark 2.1的第一次发行版开始,我们已经具备了从Spark中的Kafka内安全读取数据的功能。

要求

  • Cloudera Distribution Spark 2.1第一次发行版或更高版本。
  • Cloudera Distribution Kafka 2.1.0版本或更高版本。

体系架构

使用Spark中新的直接连接器可以支持从安全的Kafka集群中获取消息。直接连接器不使用单独的进程(亦称为接收器)读取数据。相反,Spark驱动程序将跟踪各种Kafka主题分区的偏移量,并将偏移量发送到从Kafka中直接读取数据的执行程序中。直接连接器的简单描述如下所示。

图1:Spark中的Kafka直接连接器

  • Spark节点和Kafka 代理人(broker)不一定在同一地点。
  • 一个Spark分区对应一个Kafka主题分区。
  • 如果出于某种原因,多个主题分区位于单个Kafka节点上,则有多个Spark执行程序可能会命中该节点(不过没关系)。
  • 上图只是一个简单的说明。

非常值得注意的一点是,Spark是以分布式的方式访问Kafka中的数据。Spark中的每一个任务都会从某个Kafka主题的特定分区中读取数据,该特定分区称为主题分区。主题分区理想地均匀分布在Kafka 代理人(broker)之间。

但是,为了以分布式的方式从安全的Kafka中读取数据,我们需要在Kafka(KAFKA-1696)中使用Hadoop风格的授权令牌,在写本篇博文时(2017年春季)还不支持这一功能。

我们已经考虑了各种解决这个问题的方法,但是最终决定采用从Kafka中安全读取数据的建议解决方案(至少应实现Kafka授权令牌的支持)将是Spark应用程序分发用户的keytab,以便执行程序可以访问。然后,执行程序将使用共享的用户密钥表,与Kerberos密钥分发中心(KDC)进行身份验证,并从Kafka 代理人(broker)中读取数据。YARN分布式缓存用于从客户端(即网关节点)向驱动程序和执行程序发送和共享密钥表。下图显示了当前解决方案的一览图。

图2:当前解决方案(假设YARN集群模式)

这种方法存在以下一些常见的问题:

a. 这不能被认为是发送钥匙表的最佳安全实践

b.在具有大量Kafka主题分区的情况下,所有执行程序可能会同时尝试登录KDC,存在导致重送攻击的潜在风险(类似于DDOS攻击)。

关于问题a),Spark已经使用分布式缓存将用户的密钥表从客户端(亦称为网关)节点发送到驱动程序,并且由于缺少授权令牌,所以没有办法绕过。管理员可以选择自己在Spark外部将密钥表分发到Spark执行程序节点(即YARN节点,因为Spark在YARN上运行),并调整优化共享的示例应用程序以缓解该问题。

关于问题b),我们在Kafka主题中测试了1000多个主题分区,并且在增加分区数量后未见对KDC服务器产生不利影响。

与Apache Sentry集成

例应用程序假设没有使用任何Kafka授权。如果使用了Kafka授权的话(通过Apache Sentry),则必须确保应用程序中指定的消费者小组已经获得Sentry授权。例如,如果应用程序的消费者小组的名称是my-consumer-group,则必须同时对my-consumer-group和spark-executor-my-consumer-group授予访问权限(即您的消费者小组名称前缀为spark-executor-)。这是因为Spark驱动器使用是该应用程序指定的消费者小组,但spark执行程序在此集成中使用的是不同的消费者小组,该集成在驱动程序消费者小组的名称前指定的前缀是spark-executor-。

结论

简而言之,您可以使用Cloudera Distribution of Apache Kafka 2.1.0 版本(或更高版本)和Cloudera Distribution of Apache Spark 2.1第一次发行版(或更高版本),以安全的方式从Kafka中使用Spark内的数据——包括身份验证(使用Kerberos进行身份认证)、授权(使用Sentry进行授权)以及线上加密(使用SSL/TLS进行加密)。

本文作者:Cloudera中国

来源:51CTO

实用 | 从Apache Kafka到Apache Spark安全读取数据相关推荐

  1. kafka处理流式数据_通过Apache Kafka集成流式传输大数据

    kafka处理流式数据 从实时过滤和处理大量数据,到将日志数据和度量数据记录到不同来源的集中处理程序中,Apache Kafka越来越多地集成到各种系统和解决方案中. 使用CData Sync ,可以 ...

  2. 通过Apache Kafka集成流式传输大数据

    从实时实时过滤和处理大量数据,到将日志数据和度量数据记录到不同来源的集中处理程序中,Apache Kafka日益集成到各种系统和解决方案中. 使用CData Sync ,可以轻松地将此类解决方案应用于 ...

  3. Spark(25) -- Spark SQL读取数据(mysql、json、parquet、csv、普通文本)

    Spark SQL可以通过JDBC从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中. 1. SparkSql从MySQL中 ...

  4. spark规范化读取数据

    package lambda.sqlimport lambda.log.SparkSessionApp import org.apache.spark.SparkContext import org. ...

  5. kafka教程_2018年机器学习趋势与Apache Kafka生态系统结合

    kafka教程 在慕尼黑举行的OOP 2018大会上,我介绍了有关使用Apache Kafka生态系统和诸如TensorFlow,DeepLearning4J或H2O之类的深度学习框架构建可扩展,关键 ...

  6. apache kafka_2018年机器学习趋势与Apache Kafka生态系统相结合

    apache kafka 在慕尼黑举行的OOP 2018大会上,我介绍了有关使用Apache Kafka生态系统和诸如TensorFlow,DeepLearning4J或H2O之类的深度学习框架构建可 ...

  7. 2018年机器学习趋势与Apache Kafka生态系统相结合

    在慕尼黑举行的OOP 2018大会上,我介绍了有关使用Apache Kafka生态系统和诸如TensorFlow,DeepLearning4J或H2O之类的深度学习框架构建可扩展,关键任务微服务的演讲 ...

  8. 结合Apache Kafka生态系统,谈谈2018年机器学习5大趋势

    摘要: 让我们来研究下U`ber和Netflix上的KSQL,ONNX,AutoML和机器学习平台,看看它们之间是如何相互关联的. 在2018慕尼黑OOP会议上,我展示了使用Apache Kafka生 ...

  9. 饶军:Apache Kafka的过去,现在,和未来

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 大家好,我大概简单的介绍一下,我叫饶军,我是硅谷的初创公司Confluent的联合创始人之一,我们公 ...

最新文章

  1. 联想小新系列win10系统使用IDEA经常闪退,蓝屏,死机,饱受折磨
  2. python ipaddress_Python3标准库:ipaddress Internet地址
  3. 利用matlab将二进制小数转换为十进制小数
  4. 2019年房贷利率会下调吗?
  5. php+mockjs,mockjs的常用方法分享
  6. 爱过!HTC悄然撤离中国内地市场:京东、天猫旗舰店已全部关闭
  7. UE4入门实例31(Unreal制作炫酷高效黑洞粒子)
  8. 加权均值滤波matlab,模糊加权均值滤波器
  9. 同步FIFO和异步FIFO的Verilog实现
  10. mac pdf去水印_PDF水印工具for Mac-PDF水印工具Mac版下载 V1.7-PC6苹果网
  11. windows提权思路
  12. [ESP32]学习笔记05
  13. Ubuntu下不能看视频的解决办法
  14. 绿色自适应网址发布页源码
  15. 关于MathType生成的公式插入Word显示错误的原因和处理
  16. 学会开发者工具,小程序测试再也不用愁啦
  17. c语言log函数使用
  18. 轩辕剑java完美攻略_轩辕剑外传云之遥图文攻略 超详细完美攻略
  19. 为什么黑帽子从不用鼠标,一直在敲键盘?看完长见识了!
  20. html游戏加载不出图片吗,网页图片加载不出来

热门文章

  1. ue4 导出模型_UE4构建光照后模型变黑,二套UV解决办法
  2. windows查看python安装的库_Python第三方库face_recognition在windows上的安装过程
  3. mysql每组随机一条_MySql分组后随机获取每组一条数据的操作
  4. 会考flash中文字变形为三角形_关于信息技术会考 Flash操作题实用模版
  5. 智能车竞赛线上培训:英飞凌AURIX的智能车应用--基础四轮篇
  6. 测试简易混沌振荡电路一些因素的影响
  7. 2021年春季学期-信号与系统-第十五次作业参考答案-第九小题参考答案
  8. 2021年春季学期-信号与系统-第十一次作业参考答案-第四小题
  9. g intel linux 汇编_Linux 下的C和Intel 汇编语言混用
  10. linux 设置代理_用Android手机做电脑的HTTP代理服务器