在QCon紐約2016大會上,Neha Narkhede在演講“借助Apache Kafka實現大規模流處理”中介紹了Kafka Streams,這是Kafka用于處理流式數據的新特性。據Narkhede介紹,因為“無界(unbounded)”數據集隨處可見,所以流處理越來越流行。那不再是一個像機器學習那樣的小眾問題。
Narkhede首先介紹了數據操作的基本編程范式:
請求/響應周期 批處理 流處理然后,Narkhede提供了一個來自零售領域的流處理實例:銷售和發貨從根本上說是無界數據集,流處理可以有效地處理這樣的數據集。銷售和發貨是一個事件流(“發生了什么”)和基于這些事件重新計算價格(“做些什么”)的函數是流處理器。
在考慮流處理時,Narkhede提到了開發人員如今可以選擇的兩個最流行的選項。第一,開發人員可以自己實現,對于簡單的場景而言,這可能還說得過去,但當加入像訂購、擴展性、容錯性或處理歷史數據這樣的特性時,情況會變得非常復雜。第二,開發人員可以選擇像Spark或Samza這樣的解決方案,它們都是重量級的,而且一般說來是為map/reduce而設計的。但在Narkhede看來,流處理更像基于事件的微服務,而不是map/reduce,而這就是Kafka Streams的設計初衷。
Kafka Streams是一個輕量級的庫,可以嵌入應用程序,而且對打包或部署沒有施加任何限制。Narkhede接下來概括地介紹了如何實現流處理系統的重要功能。
因為事件日志分區,所以擴展性是自動支持的。這樣,基于Kafka Streams的應用程序就可以形成集群。消費者庫也會在并行數據處理方面提供幫助。 容錯性也是開箱即用的。Kafka Streams集群中的節點不分主次,都是同等的節點。本地狀態差不多就是一個緩存,如果一個節點宕了,則數據處理只要簡單地轉移到另一個節點就可以了。 有狀態處理也是支持的,根據需要通過連接或窗口計算實現。在這種情況下,必要的數據會被推送到處理器,以避免遠程訪問。 支持使用修改后的業務邏輯對數據進行再處理,允許新消費者從偏移量0(從頭)開始事件處理。接下來,Narkhede介紹了Kafka Streams的雙重性,作為實現給定特性的基本原則:從根本上講,就是表(“狀態”)和流(“狀態如何變化”)的概念相結合。因此,基于Kafka Streams的應用程序可以同時具備響應性和狀態。另外,同時具備這兩個概念還會簡化架構。
Neha Narkhede在結尾時簡單地介紹了一下Kafka Connect,這是一個副項目,可以連接各種數據庫、Hadoop或Elasticsearch等系統,向Kafka輸入數據或從Kafka獲取數據。
請注意,大部分QCon講稿都將在會后數周在InfoQ上提供,而幻燈片可以從大會的官方網站上下載。
查看英文原文:Neha Narkhede: Large-Scale Stream Processing with Apache Kafka