天天看点

Kafka 数据源、Receiver 和 Direct 方式接收数据_2|学习笔记

开发者学堂课程【大数据实时计算框架 Spark 快速入门:Kafka 数据源、Receiver 和 Direct 方式接收数据_2】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:

https://developer.aliyun.com/learning/course/100/detail/1730

Kafka 数据源、Receiver 和 Direct 方式接收数据_2

Apache Kafka 将发布-订阅消息传递重新考虑为分布式、分区、复制的提交日志服务。

在这里,我们解释了如何配置 Spark Streaming 来接收来自 Kafka 的数据。

有两种方法可以解决这个问题——旧的方法是使用 Receivers 和 Katka 的高级 API,而新的实验方法(在 Spark 1.3 中引入)则不使用 Receivers。

他们有不同的编程模型,特征,保证和语义。

这种方法使用一个 Receiver 来接收数据。

与所有接收器一样,通过接收器从 Kafka 接收到的数据存储在 Spark 执行器中,然后由 Spark Streaming 启动的作业对数据进行处理。

然而,在默认连续下,这种方法可能会在故障下丢失数据(参见 receiver reliability,为了确保零数据丢失,你必须在 Spark Streaming 中启用 Write Ahead Logs (在 Spark 1.2 中引入)。这将同步保存所有收到的 Katka 数据到提前写入日志分布式文件系统。以便在故障时可以恢复所有数据。 

需要记住:

Kafka 中的主题分区与 Spark Streaming 中生成的 RDD 的分区不相关。因此,在kafkautils.createStream() 中增加主题特定分区的数量只会增加单个接收器中使用的主题的线程数。不会增加 Spark 处理数据的并行度。

多个 Kafka 输入 DStreams 可以创建不同的组和主题,以使用多个接收器并行接收数据。

如果你已经在 HDFS 这样的复制文件系统上启用了 Write Ahead Loas。接收到的数据已经复制到日志中。因此,存储级别在存储级别为输入流到StorageLevel.MENORY_AND_DISK SER(即使用Kafkautils。

createStream (....StorageLevel, MEMORY-AND-DISK-SER))。

继续阅读