1. 程式人生 > >Spark獲取Kafka資料的兩種方式(原始碼)

Spark獲取Kafka資料的兩種方式(原始碼)

在sparkstreaming接受資料的時候有兩種方式

(1)DirectKafkaInputDStream 使用的是 Direct 方式獲取資料;DirectKafkaInputDStream 繼承自 InputDStream
(2)SocketInputDStream 使用的是 Receiver-based 方式獲取資料;SocketInputDStream 繼承自ReceiverInputDStream

這兩種方式的區別:

Direct是去資料來源拉取資料,只有在真正執行的時候才去獲取資料
Receiver是把資料取來儲存,是實時都在獲取資料並儲存

ReceiverInputDStream

1:將receive分給單個excutor,在excutor啟動多執行緒(同kafka的partiton個數)來獲取kafka的資料。
2:receive一直在獲取kafka資料,並存在block上,等spark job去獲取執行。然後更新offset。

DirectKafkaInputDStream

獲取kafka資料

由於DirectKafkaInputDStream 不是繼承自ReceiverInputDStream。所以不需要有Receiver,所以也就沒有獲取資料,不需要將資料存在記憶體block裡面,也就沒有block資訊等等

讀取資料

使用Direct的方式的好處之一就是,在要使用資料的時候才去取資料。
在開始new 一個DirectKafkaInputDStream 的時候會帶入一個fromOffsets,表示初始的資料偏移量(檢視我kakfa相關的部落格)
這裡寫圖片描述

獲取kafka最後的偏移量作為untilOffsets

然後建立一個KafkaRDD。
然後更新fromOffsets和untilOffsets
後面就是KafkaRDD的內容了

KafkaRDD(檢視我kafka的微博)

可以看出KafkaRDD的分割槽數,和kafka的分割槽是一樣的。因為是從offset裡面來的
其實對於DirectKafkaInputDStream 來說應該是單機執行的,真正並行的是KafkaRDD取資料
取資料是使用KafkaRDDIterator

相關推薦

Spark獲取Kafka資料方式原始碼

在sparkstreaming接受資料的時候有兩種方式 (1)DirectKafkaInputDStream 使用的是 Direct 方式獲取資料;DirectKafkaInputDStream 繼承自 InputDStream (2)Socket

工具篇-Spark-Streaming獲取kafka數據的方式轉載

min 但是 col 必須 hdfs span 保存 memory 簡單 轉載自:https://blog.csdn.net/wisgood/article/details/51815845 一、基於Receiver的方式 原理 Receiver從Kafka中獲取的數

js form表單傳送資料方式post get區別

<!DOCTYPE HTML> <html> <head> <title>please enter your title</

java動態獲取WebService的方式復雜參數類型)

args oid 類型 ade poi 參數類型 pid eth lse java動態獲取WebService的兩種方式(復雜參數類型) 第一種: @Override public OrderSearchListRes searchOrderList(Order_Fligh

Android: Android Studio簽名打包的方式zz

信息 rda pan 相同 prop .cn 一個 一次 ack 註:給我們自己開發的app簽名,就代表著我自己的版權,以後要進行升級,也必須要使用相同的簽名才行。簽名就代表著自己的身份(即keystore),多個app可以使用同一個簽名。如果不知道簽名是啥意思,請自行百度

Nginx反向代理實現會話session保持的方式

upstream 適用於 反向代理 ip_hash 負載 amp 丟失 tail 基於 http://blog.csdn.net/gaoqiao1988/article/details/53390352 一、ip_hash: ip_hash使用源地址哈希算法,將同一客戶

Spring在代碼中獲取bean的幾方式

mxml get text spa 回調 獲取對象 ati -s null 獲取spring中bean的方式總結: 方法一:在初始化時保存ApplicationContext對象 1 ApplicationContext ac = new FileSystemXml

將HTML頁面自動儲存為PDF檔案並上傳的方式-前端react方式

一、業務場景   公司的樣本檢測報告以React頁面的形式生成,已調整為A4大小的樣式並已實現分頁,業務上需要將這個網頁生成PDF檔案,並上傳到伺服器,後續會將這個檔案傳送給客戶(這裡不考慮)。 二、原來的實現形式   瀏覽器原生方法:window.print()可以將網頁儲存為PDF檔案,由於檢測報告

斐波那契數列,1 2 3 5 8......方式JavaScript

序列:1,2,3,5,8,13...。找出第20個數是多少?得出前20個數之和是多少? 方法一:            var i=1, j=1,sum=0;            for(var k=0;k<20;k++){                    

鄰接表的建立-方式模板

/* * 構建鄰接表模板 * */ #include<stdio.h> #include<string.h> int head[100100];//表頭,head[i]代表起

Struts2整合Spring的方式最新

方式一隻需要在專案中引入struts2-spring-plugin-2.2.1.1.jar這個Jar包就可以了。這個Jar包引入之後確保web.xml中載入了spring配置,否則會報空指標異常(原因是方式一會自動在spring配置檔案中找action依賴的service,

python呼叫dll中特定函式的方式ctypes

1.直接使用函式名,函式名可以用dependency walker等工具檢視。 import ctypes dll = CTYPES.CDLL("test.dll") res = test(3, 4)

執行PowerShell指令碼有方式

執行PowerShell指令碼有兩種方式. 在執行任何指令碼檔案之前, 你都必須首先設定一個恰當的Execution Policy. PowerShell指令碼跟Windows CMD一樣, 和MS-DOS批處理一樣, 檔案需要被儲存為.ps1字尾名, 比如說mysc

mysql新增外來鍵約束的方式重要

-- 新增外來鍵約束 CREATE TABLE stu(     sid INT PRIMARY KEY,     NAME VARCHAR(50) NOT NULL ); -- 新增外來鍵約束方式一

ffmpeg解碼音訊的方式根據同步位元組解析音訊幀

根據adts同步頭提取aac音訊單幀: #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> extern "C" { #includ

Spark中RDD轉換成DataFrame的方式分別用Java和scala實現

 一:準備資料來源       在專案下新建一個student.txt檔案,裡面的內容為: print? <code class="language-java">1,zhangsan,20   2,lisi,21   3,wanger,1

獲取IOC容器中的bean的方式id和class的區別

// ClassPathXmlApplicationContext: 是 ApplicationContext的實現類,從類路徑下來載入配置檔案 ApplicationContext ctx=new ClassPathXmlApplicationContext("a

《連載 | 物聯網框架ServerSuperIO教程》- 10.持續傳輸大塊資料流的方式如:檔案

目       錄 10.持續傳輸大塊資料流的兩種方式(如:檔案)... 2 10.1        概述... 2 10.2        大塊資料流的兩種傳輸方式... 2 10.2.1       協議資料包的方式... 2 10.2.2    

spark連線hivespark-shell和eclipse方式

1、在伺服器(虛擬機器)spark-shell連線hive 1.1 將hive-site.xml拷貝到spark/conf裡 cp /opt/apache-hive-2.3.2-bin/conf/hive-site.xml /opt/spark-

Android獲取IP地址的方式準確版

最近看了好多網上獲取IP地址的例子,發現好多都不完全準確,這裡我寫一下獲取ip地址的兩種方式。 比如微信支付,後臺在做介面的時候,要求App端傳入IP地址,我們需要判斷是網路環境,WI-FI還是3G,所以需要獲取這兩種環境的ip地址。 第一步:首先是判斷網路環境: Stri