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