2016-03-16 21 views
1

我想了解Kafka和Spark(Streaming)節點之間的通信是如何發生的。我有以下問題。Spark Streaming:Spark和Kafka的通訊如何發生?

  1. 如果Kafka服務器和Spark節點位於兩個獨立的羣集中,通信將如何進行。需要配置它們的步驟是什麼?
  2. 如果兩者都在相同的羣集中,但在不同的節點中,將如何進行通信。

通信我這裏的意思是,它是否是一個RPC或插口進行通信。我想了解內部解剖

任何幫助表示讚賞。

在此先感謝。

回答

3

首先,它不計,如果卡夫卡節點和星火節點是相同的羣集或不在,但他們應該能夠相互連接(開放的端口的防火牆)。

有兩種方法可以使用舊版的KafkaUtils.createStream() API和更新版的KafkaUtils.createDirectStream()方法,使用Spark Streaming從Kafka中讀取數據。

我並不想進入它們之間的區別,這是有據可查的here(簡而言之,直接流比較好)。

解決您的問題,溝通如何發生(內部解剖):找出最佳方法是查看Spark源代碼。

createStream() API使用一組來自官方org.apache.kafka包的卡夫卡消費者。這些卡夫卡消費者擁有自己的客戶名爲NetworkClient,您可以查詢here。總之,NetworkClient使用套接字進行通信。

createDirectStream() API確實使用來自相同org.apache.kafka包的Kafka SimpleConsumer。該SimpleConsumer類從卡夫卡讀到一個java.nio.ReadableByteChannel這是java.nio.SocketChannel子類,所以它到底是用插座要做的事,但多一點間接使用Java的非阻塞I/O API的便利。

所以要回答你的問題:它是用套接字完成的。

相關問題