1. 程式人生 > >kafka direct 跟receiver 方式接收資料的區別

kafka direct 跟receiver 方式接收資料的區別

Receiver是使用Kafka的高層次Consumer API來實現的。receiver從Kafka中獲取的資料都是儲存在Spark Executor的記憶體中的,然後Spark Streaming啟動的job會去處理那些資料。然而,在預設的配置下,這種方式可能會因為底層的失敗而丟失資料。如果要啟用高可靠機制,讓資料零丟失,就必須啟用Spark Streaming的預寫日誌機制(Write Ahead Log,WAL)。該機制會同步地將接收到的Kafka資料寫入分散式檔案系統(比如HDFS)上的預寫日誌中。所以,即使底層節點出現了失敗,也可以使用預寫日誌中的資料進行恢復,但是效率會下降。

direct 這種方式會週期性地查詢Kafka,來獲得每個topic+partition的最新的offset,從而定義每個batch的offset的範圍。當處理資料的job啟動時,就會使用Kafka的簡單consumer api來獲取Kafka指定offset範圍的資料。

這種方式有如下優點:
1、簡化並行讀取:如果要讀取多個partition,不需要建立多個輸入DStream然後對它們進行union操作。Spark會建立跟Kafka partition一樣多的RDD partition,並且會並行從Kafka中讀取資料。所以在Kafka partition和RDD partition之間,有一個一對一的對映關係。


2、高效能:如果要保證零資料丟失,在基於receiver的方式中,需要開啟WAL機制。這種方式其實效率低下,因為資料實際上被複制了兩份,Kafka自己本身就有高可靠的機制,會對資料複製一份,而這裡又會複製一份到WAL中。而基於direct的方式,不依賴Receiver,不需要開啟WAL機制,只要Kafka中作了資料的複製,那麼就可以通過Kafka的副本進行恢復。

3、一次且僅一次的事務機制:
    基於receiver的方式,是使用Kafka的高階API來在ZooKeeper中儲存消費過的offset的。這是消費Kafka資料的傳統方式。這種方式配合著WAL機制可以保證資料零丟失的高可靠性,但是卻無法保證資料被處理一次且僅一次,可能會處理兩次。因為Spark和ZooKeeper之間可能是不同步的。
    基於direct的方式,使用kafka的簡單api,Spark Streaming自己就負責追蹤消費的offset,並儲存在checkpoint中。Spark自己一定是同步的,因此可以保證資料是消費一次且僅消費一次。

相關推薦

kafka direct receiver 方式接收資料區別

Receiver是使用Kafka的高層次Consumer API來實現的。receiver從Kafka中獲取的資料都是儲存在Spark Executor的記憶體中的,然後Spark Streaming啟動的job會去處理那些資料。然而,在預設的配置下,這種方式可能會因為底層

SparkStreaming與kafka通過直連方式讀取資料

1、Spark-Streaming的receive的方式和直連方式有什麼區別: Receive接收固定時間間隔的資料(放在記憶體中),達到固定的時間才進行處理,效率低並且容易丟失資料(Kafka高階API),自動維護偏移量 Direct直連方式,相當於直接連線到Kafka的分割槽上,相當於K

spark streaming 中 direct 直連方式kafka中怎麼拉取資料

我們知道 SparkStreaming 用 Direct 的方式拉取 Kafka 資料時,是根據 kafka 中的 fromOffsets 和 untilOffsets 來進行獲取資料的,而 fromOffsets 一般都是需要我們自己管理的,而每批次的 untilOffse

Spark Streaming消費Kafka Direct方式資料零丟失實現

一、概述 上次寫這篇文章文章的時候,Spark還是1.x,kafka還是0.8x版本,轉眼間spark到了2.x,kafka也到了2.x,儲存offset的方式也發生了改變,筆者根據上篇文章和網上文章,將offset儲存到Redis,既保證了併發也保證了資料不丟失,經過測試,有效。 二、

SparkStreaming通過Kafka獲取資料Receiver方式

Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,有如下特性:1、通過O(1)的磁碟資料結構提供訊息的持久化,這種結構對於即使數以TB的訊息儲存也能夠保持長時間的穩定效能。2、高吞吐量:即使是非常普通的硬體Kafka也可以支援每秒數百萬的訊息。3、支援通過Kafka伺服器和消

SparkStreaming整合Kafka--Direct方式

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.

SparkStreaming(12):高階資料來源kafka Receiver方式(生產)

1.準備環境 (1) 啟動zk     bin/zkServer.sh start (2)啟動kafka     bin/kafka-server-start.sh -daemon config/server.pr

SparkStreaming(13):高階資料來源kafka Direct方式(生產)

【Direct方式,直接從kafka的broker讀取資料,而Receiver方式,從zk獲得偏移量資訊,效能要差一些!】 1.測試環境 (1)啟動zk bin/zkServer.sh start (2) 啟動kafka bin/kafka-server-start.sh -da

[Spark]Spark-streaming通過Receiver方式實時消費Kafka流程(Yarn-cluster)

1.啟動zookeeper 2.啟動kafka服務(broker) [[email protected] kafka_2.11-0.10.2.1]# ./bin/kafka-server-start.sh config/server.properties 3.啟動kafka的producer(

RESTful風格的請求方式, 放到body裡面請求(避免介面雖用的是post方式接收, 實則在url後面)

     雖然也用了很時間RESTful風格來開發,但最近發現自己犯了個錯誤(貌似我們公司好多人都在正在犯這個錯誤), 就是雖然我的後臺介面用的是post來接收,前端也是按照post方式來發送, 執行後實際上所有引數是跟在url後面, 這是很明顯的get方式才會的,  pos

表單向伺服器提交資料有幾種方式?這些方式有什麼區別

將表單資料傳送給伺服器的常用方式有兩種:Get和Post。 瀏覽器傳送給伺服器的HTTP請求分為:請求頭(header)和請求主體(body)兩部分。 其中,必須包含頭部分,用於指定傳送請求的方式、

SSM前端表單向後臺傳送陣列,後臺的接收資料方式

在springMVC中,controller中方法的引數是自動注入的,在使用註解的方式下,通常有:                  @RequestParam:  ·取querystring當中的引數

Linux下TCP迴圈接收資料方式

簡介 伺服器呼叫accept與客戶端建立連線,連線建立成功後,會返回一個fd,表示這條了連線的檔案描述符。之後呼叫recv函式接受連線的資訊。根據recv函式的原型,需要伺服器程式有一個接收緩衝區,實際情況可能緩衝區長度不夠,需要多次接收。這時候需要呼叫while迴圈接收。 如果

Logstash學習10_Logstash從Kafka或檔案接收資料的配置demo介紹

下面介紹兩個Logstash的配置Demo: Demo1: input { kafka { zk_connect => "10.10.16.2:2181,10.10.16.3:2181,10.10.16.4:2181" group_id => "test

Spark整合Kafka原始碼分析——SparkStreaming從kafak中接收資料

整體概括:要實現SparkStreaming從kafak中接收資料分為以下幾步(其中涉及的類在包org.apache.spark.streaming.kafka中): 1.建立createStream()函式,返回型別為ReceiverInputDStream物件,在cre

資料的傳輸方式資料接收

 定址方式 地址型別(Addresstypes) ZigBee裝置有兩種型別的地址。一種是64位IEEE地址,即MAC地址,另一種是16位網路地址。 64位地址使全球唯一的地址,裝置將在它的生命週期中一直擁有它。它通常由製造商或者被安裝時設定。這些地址由IEEE來維護和

.NET POST提交資料接收資料 用url傳參方式

//1、物件提交,字典方式 //介面方:public ActionResult GetArry(Car model) public void PostResponse() { HttpWebReques

【十四】Spark Streaming整合Kafka使用Receiver方式(使用Scala語言)

官方網站 Kafka提供了新的consumer api 在0.8版本和0.10版本之間。0.8的整合是相容0.9和0.10的。但是0.10的整合不相容以前的版本。 這裡使用的整合是spark-streaming-kafka-0-8。官方文件 配置SparkStrea

Android socket通過UDP的方式傳送,接收資料

Android socket通過UDP的方式來發送和接收資料,從而進行手機間的通訊。 傳送方: public class SendToAIUIUtils { private static InetAddress mAddress; p

STM32串列埠傳送資料接收資料方式總結

       之前寫了篇關於ESP8266使用AT指令進行互相通訊的實驗,在寫STM32串列埠接發資料的程式中,覺得有必要將之前學的有關於串列埠方面的使用經歷加以總結。 串列埠傳送資料:        1. 串列埠傳送資料最直接的方式就是標準呼叫庫函式 。 void