实用 | 从Apache Kafka到Apache Spark安全读取数据

标签: bigdata | 发表时间:2017-06-23 00:00 | 作者:
出处:http://itindex.net/relian

大数据

作者:Cloudera中国

引言

随着在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进行加密)。

End.

转载请注明来自36大数据(36dsj.com): 36大数据» 实用 | 从Apache Kafka到Apache Spark安全读取数据

相关 [apache kafka apache] 推荐:

apache kafka消息服务

- - CSDN博客架构设计推荐文章
apache kafka中国社区QQ群:162272557. apache kafka参考. 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息. 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息. Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费.

Apache kafka原理与特性(转)

- - 互联网 - ITeye博客
 转自:http://shift-alt-ctrl.iteye.com/blog/1930345. 前言: kafka是一个轻量级的/分布式的/具备replication能力的日志采集组件,通常被集成到应用系统中,收集"用户行为日志"等,并可以使用各种消费终端(consumer)将消息转存到HDFS等其他结构化数据存储系统中.因为日志消息通常为文本数据,尺寸较小,且对实时性以及数据可靠性要求不严格,但是需要日志存储端具备较高的数据吞吐能力,这种"宽松"的设计要求,非常适合使用kafka. .

Apache Kafka开发入门指南之2

- - CSDN博客云计算推荐文章
Apache Kafka开发入门指南之2. 作者:chszs,转载需注明. 博客主页: http://blog.csdn.net/chszs. Apache Kafka目标是统一离线和在线处理,与Flume和Scribe相比较,Kafka在处理活动流数据方面更具优势. 但是从架构的视野来看,Kafka与传统的消息系统(例如ActiveMQ或RabbitMQ)更相似一些.

实用 | 从Apache Kafka到Apache Spark安全读取数据

- - IT瘾-bigdata
随着在CDH平台上物联网(IoT)使用案例的不断增加,针对这些工作负载的安全性显得至关重要. 本篇博文对如何以安全的方式在Spark中使用来自Kafka的数据,以及针对物联网(IoT)使用案例的两个关键组件进行了说明. Cloudera Distribution of Apache Kafka 2.0.0版本(基于Apache Kafka 0.9.0)引入了一种新型的Kafka消费者API,可以允许消费者从安全的Kafka集群中读取数据.

Apache Kafka:下一代分布式消息系统

- - zzm
Apache Kafka是分布式发布-订阅消息系统. 它最初由LinkedIn公司开发,之后成为Apache项目的一部分. Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务. Apache Kafka与传统消息系统相比,有以下不同:. 它被设计为一个分布式系统,易于向外扩展;.

Apache Shiro 介绍

- - CSDN博客推荐文章
什么是Apache Shiro?. Apache shiro 是一个强大而灵活的开源安全框架,可清晰地处理身份认证、授权、会话(session)和加密. Apache Shiro最主要的初衷是为了易用和易理解,处理安全问题可能非常复杂甚至非常痛苦,但并非一定要如此. 一个框架应该尽可能地将复杂的问题隐藏起来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码.

Apache防止攻击

- - 小彰
为了防止恶意用户对Apache进行攻击,我们需要安装mod_security这个安全模块. mod_security 1.9.x模块的下载与安装. 下载地址: http://www.modsecurity.org/download/index.html. 建议使用1.9.x,因为2.x的配置指令与1.x完全不同,解压后进入解压目录,执行:.

Apache OpenOffice 3.4发布

- - Solidot
Apache OpenOffice的第一个版本v3.4正式发布. 主要新特性包括:改进ODF支持,包括ODF 1.2加密选项和新电子表格功能;改进Calc组件的数据透视表(Pivot Table)支持;原生支持SVG,增强图形如线帽和剪切变形;简体和繁体中文等原生语言支持;改进性能等. 在甲骨文将OpenOffice.org捐给Apache软件基金会后,OOo的命运曾存在许多争议.

Apache PDFBox 1.8.0 发布

- - 开源中国社区最新新闻
Apache PDFBox 1.8.0 发布了,该版本除了修复大量 bug 之外,还包含如下新特性:. PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具. PDF 文档加密与解密. 与 Lucene搜索引擎的集成. 填充PDF/XFDF表单数据.

Apache Log4j 2.0介绍

- - CSDN博客推荐文章
Apache Log4j 2.0介绍. 作者:chszs,转载需注明. 作者博客主页:http://blog.csdn.net/chszs. Apache Log4j是著名的Java日志框架之一,在早些年应用最广. 但近两年来,随着SLF4J和LogBack的兴起,很多流行的开源框架在日志模块方面逐步转移到SLF4J+LogBack上,Log4j日渐衰落.