online gambling singapore online gambling singapore online slot malaysia online slot malaysia mega888 malaysia slot gacor live casino malaysia online betting malaysia mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 實用| 從Apache Kafka到Apache Spark安全讀取數據

摘要: 隨著在CDH平台上物聯網(IoT)使用案例的不斷增加,針對這些工作負載的安全性顯得至關重要。本篇博文對如何以安全的方式在Spark中使用來自Kafka的數據,以及針對物聯網(IoT)使用案例的兩個關鍵組件進行了說明。


大數據

作者: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大數據


留下你的回應

以訪客張貼回應

0

在此對話中的人們