來(lái)自 Confluent的Confluent Platform 3.0消息系統(tǒng)支持使用Kafka Streams實(shí)現(xiàn)實(shí)時(shí)的數(shù)據(jù)處理,這家公司也是在背后支撐Apache Kafka消息框架的公司,它近日宣布最新的開(kāi)源平臺(tái)已經(jīng)達(dá)到了通用發(fā)布(general availability)版本。Confluent Platform可以圍繞Apache Kafka創(chuàng)建可擴(kuò)展的數(shù)據(jù)平臺(tái),Apache Kafka是一個(gè)實(shí)時(shí)的、分布式的、具有容錯(cuò)功能的消息隊(duì)列,它能夠擴(kuò)展至非常大量的消息。
Kafka Streams是進(jìn)行數(shù)據(jù)實(shí)時(shí)處理的輕量級(jí)方案,可以用在欺詐和安全監(jiān)控、物聯(lián)網(wǎng)的(Internet of Things,IoT)操作和設(shè)備監(jiān)控。它為Kafka提供了一個(gè)新的、原生的流開(kāi)發(fā)環(huán)境。開(kāi)發(fā)人員能夠使用這個(gè)庫(kù)基于Kafka構(gòu)建分布式的流處理應(yīng)用。Kafka涵蓋的功能是消息和數(shù)據(jù)傳輸,而Kafka Streams涵蓋的功能則是數(shù)據(jù)的處理。
Kafka Streams支持有狀態(tài)和無(wú)狀態(tài)的處理,同時(shí)還支持?jǐn)?shù)據(jù)的分布式容錯(cuò)處理。要使用Kafka Streams,并不需要單獨(dú)的集群、消息轉(zhuǎn)換層或外部依賴(lài)。它每次會(huì)處理一個(gè)事件,而不是小批量(micro-batch)的消息。它還允許數(shù)據(jù)的延遲抵達(dá)并支持windowing處理亂序的數(shù)據(jù)。
在最近的新聞中,Confluent還宣布了Confluent Control Center的發(fā)布,這是一個(gè)用于管理Kafka集群的商業(yè)產(chǎn)品。Confluent Control Center可以作為Confluent Enterprise 3.0的一部分來(lái)獲取,它的設(shè)計(jì)目的是幫助數(shù)據(jù)工程團(tuán)隊(duì)操作組織中的Kafka。這個(gè)管理工具為運(yùn)維人員和數(shù)據(jù)團(tuán)隊(duì)提供了監(jiān)控Kafka系統(tǒng)不同組件的功能,這些組件包括主題、生產(chǎn)者和消費(fèi)者,并且能夠理解數(shù)據(jù)管道中發(fā)生了什么狀況。
借助Control Center,運(yùn)維人員能夠在消息級(jí)別檢查數(shù)據(jù)環(huán)境,從而能夠理解消息投遞情況、可能出現(xiàn)的瓶頸并且可以在原生的Kafka環(huán)境中觀察端到端的消息投遞。為了滿(mǎn)足特定的需求,Control Center UI允許運(yùn)維人員連接新的數(shù)據(jù)源到集群上并配置新的數(shù)據(jù)源連接器。
如果你有興趣學(xué)習(xí)Control Center的更多知識(shí),可以關(guān)注接下來(lái)的webinar。
InfoQ采訪到了來(lái)自Confluent的Joseph Adler(產(chǎn)品管理和數(shù)據(jù)科學(xué)主管)和Michael Noll(產(chǎn)品經(jīng)理)來(lái)進(jìn)一步了解這些產(chǎn)品發(fā)布信息以及這些產(chǎn)品如何幫助開(kāi)發(fā)人員和運(yùn)維團(tuán)隊(duì)。
InfoQ:Kafka Streams與其他的流數(shù)據(jù)處理框架如Storm、Spark Streaming和Apache Flink相比,其差異性是什么呢?
Joseph Adler & Michael Noll:在流處理框架方面,負(fù)責(zé)流處理的開(kāi)發(fā)人員有很多不同的可選方案。事實(shí)上,其中很多方案已經(jīng)將Kafka用于在它們的流處理管道中了。Kafka Streams構(gòu)建在Apache Kafka堅(jiān)實(shí)的技術(shù)基礎(chǔ)之上,從這里它繼承了Apache Kafka的可擴(kuò)展性、彈性、容錯(cuò)性以及很多其他的特性。我們相信Kafka Streams降低了進(jìn)入流處理領(lǐng)域的門(mén)檻,因此能夠讓很多的公司從實(shí)時(shí)洞悉業(yè)務(wù)現(xiàn)狀中收益。Kafka Streams也繼承了Kafka的安全模型,也就是加密傳輸中的數(shù)據(jù),這對(duì)像金融這樣的行業(yè)來(lái)說(shuō),是很好的選擇。
像Spark和Flink這樣的框架通常會(huì)用在中心數(shù)據(jù)工程團(tuán)隊(duì)中,用于發(fā)揮大數(shù)據(jù)和數(shù)據(jù)倉(cāng)庫(kù)設(shè)施的威力。它們的設(shè)計(jì)是“大型重量級(jí)(heavy lifting)”的——運(yùn)行復(fù)雜的查詢(xún),所消耗的時(shí)間能夠持續(xù)數(shù)小時(shí)甚至更長(zhǎng)。
Kafka Streams適用于“快速的應(yīng)用”或“流應(yīng)用”——在這些應(yīng)用中,產(chǎn)生響應(yīng)的速度是非常重要的。輸出可能是購(gòu)買(mǎi)決策、基于特定場(chǎng)景的報(bào)價(jià)或者安全告警。這些開(kāi)發(fā)人員一般會(huì)位于某個(gè)業(yè)務(wù)處理的流水線(xiàn)之中。
借助Kafka Streams,對(duì)于實(shí)時(shí)處理這樣的需求,我們不必像已有的流處理框架那樣安裝和運(yùn)維單獨(dú)的集群。很多人其實(shí)已經(jīng)使用Kafka從事一些實(shí)時(shí)的數(shù)據(jù)處理(如欺詐探測(cè)、用戶(hù)活動(dòng)跟蹤或流量監(jiān)控)并將Kafka作為數(shù)據(jù)平臺(tái)中消息系統(tǒng)的基石,所以使用Kafka Streams來(lái)處理Kafka原生環(huán)境中所有的數(shù)據(jù)是很自然的選擇,這樣的話(huà),就沒(méi)有必要新增另外的基礎(chǔ)設(shè)施和技術(shù)了,如果要新增技術(shù)的話(huà),開(kāi)發(fā)人員可能還需要對(duì)其理解、優(yōu)化并保證它的持續(xù)運(yùn)行。
InfoQ:Flink在流數(shù)據(jù)的處理中,并沒(méi)有使用micro batch的方式,這與Kafka Streams的工作機(jī)制是類(lèi)似的。Kafka Streams與Flink還有什么相似之處或差異嗎?
Adler & Noll: Kafka Streams學(xué)習(xí)了行業(yè)之前的經(jīng)驗(yàn),包括學(xué)術(shù)上的,也包括開(kāi)源項(xiàng)目社區(qū)的,如Apache Samza。這說(shuō)明在重要領(lǐng)域具有一定的相似性,比如恰當(dāng)?shù)臅r(shí)間模型來(lái)區(qū)分事件時(shí)間與處理時(shí)間的語(yǔ)義,以及正確處理延遲到達(dá)、數(shù)據(jù)亂序的能力。這些特性對(duì)于任何實(shí)用的流處理用例都是必需的。
另外一個(gè)關(guān)鍵的差異在于Kafka Streams支持彈性,也就是說(shuō),可以動(dòng)態(tài)地增加和收縮處理能力。例如,在Kafka Streams中,開(kāi)始的時(shí)候,我們可以只有一臺(tái)機(jī)器運(yùn)行流處理應(yīng)用,用它來(lái)處理傳入的業(yè)務(wù)數(shù)據(jù)。當(dāng)數(shù)據(jù)量增大,一臺(tái)機(jī)器的處理能力不足以應(yīng)對(duì)的時(shí)候,那么就可以(在運(yùn)行時(shí)操作,無(wú)需停機(jī))在另外一臺(tái)機(jī)器上啟動(dòng)相同的應(yīng)用,它們會(huì)自動(dòng)分擔(dān)工作內(nèi)容。
InfoQ:Kafka Streams支持Windowing功能。你們能更詳細(xì)地描述一下這個(gè)特性嗎,在實(shí)時(shí)數(shù)據(jù)處理中,它的作用是什么?
Adler & Noll: windowing允許我們將持續(xù)的數(shù)據(jù)流劃分為更小的塊(chunk)。這種windowing最為常見(jiàn)的是基于時(shí)間,比如基于五分鐘的間隔來(lái)執(zhí)行分析。對(duì)于很多的使用場(chǎng)景來(lái)說(shuō),windowing是非常重要的,比如欺詐檢測(cè)(“這個(gè)人在過(guò)去從來(lái)沒(méi)有在一個(gè)小時(shí)內(nèi)多次使用信用卡,但現(xiàn)在,我們?cè)谶^(guò)去的五分鐘內(nèi)看到了五十筆交易——那么信用卡可能被盜了”)或者熱門(mén)話(huà)題(“在過(guò)去的24小時(shí)內(nèi),Twitter的大多數(shù)用戶(hù)關(guān)注美國(guó)的總統(tǒng)大選、新的Apple MacBook以及Justin Bieber的最新視頻”)。
InfoQ:你們能闡述一下基于時(shí)間(Time)和基于會(huì)話(huà)(Session)的windowing方案的差別嗎,以及分別應(yīng)該在何時(shí)使用它們?
Adler & Noll:比如說(shuō),基于時(shí)間的windowing會(huì)將流數(shù)據(jù)劃分為每隔五分鐘的數(shù)據(jù)塊??梢詫⑵湎胂鬄橐粋€(gè)計(jì)數(shù)器:每隔五分鐘,你就會(huì)宣布“新窗口的數(shù)據(jù)!”有很多的使用場(chǎng)景都需要windowing功能,可能絕大多數(shù)都是基于時(shí)間的。
與之不同,如果是基于會(huì)話(huà)的windowing,那么它的范圍就不是嚴(yán)格的計(jì)時(shí)器規(guī)則了,這是為了將相關(guān)的事件分組到一個(gè)所謂的會(huì)話(huà)(session)中??梢詫⑦@些會(huì)話(huà)視為一個(gè)階段內(nèi)的活動(dòng)。使用基于會(huì)話(huà)windowing的一個(gè)常見(jiàn)使用場(chǎng)景就是分析用戶(hù)交互事件,例如理解用戶(hù)如何閱讀《金融時(shí)報(bào)》的Web站點(diǎn)以及如何與Facebook進(jìn)行交互。
InfoQ:你們能介紹一下Kafka在安全方面所提供的功能嗎,這可能會(huì)涵蓋到對(duì)消息和主題的限制訪問(wèn)以及跨Kafka服務(wù)器的加密數(shù)據(jù)傳輸?
Adler & Noll:在認(rèn)證方面,Kafka支持SASL/Kerberos、SASL/PLAIN和SSL/TLS。而在授權(quán)方面,Kafka提供了ACL來(lái)控制對(duì)特定主題的讀取/寫(xiě)入/管理訪問(wèn),該功能可以配置為針對(duì)認(rèn)證用戶(hù)和特定的IP來(lái)進(jìn)行。
傳輸中的數(shù)據(jù)可以使用SSL/TLS進(jìn)行加密,它的加密發(fā)生在數(shù)據(jù)生產(chǎn)者到Kafka broker之間(服務(wù)器),從Kafka broker到數(shù)據(jù)消費(fèi)者之間以及Kafka集群內(nèi)部broker之間的通信。
InfoQ:Kafka集群能否部署到Docker容器之中?是否有什么最佳實(shí)踐或在線(xiàn)資源,幫助開(kāi)發(fā)人員進(jìn)行這種集成?
Adler & Noll:是的,可以部署Kafka集群到Docker容器中。Confluent提供了實(shí)驗(yàn)性的Docker鏡像來(lái)運(yùn)行Confluent Platform,其中就包含了Apache Kafka。也就是說(shuō),運(yùn)行基于Docker的Kafka環(huán)境依然還是一種例外的情況,而不是通用的規(guī)則。一方面這是因?yàn)橄鄬?duì)來(lái)講,Docker還是較新的技術(shù),尚沒(méi)有完全成熟。另一方面,在數(shù)據(jù)架構(gòu)中,Kafka的角色是存儲(chǔ)數(shù)據(jù)和提供數(shù)據(jù)服務(wù),也就是說(shuō)。它是“有狀態(tài)”的服務(wù)。Docker的哲學(xué)和最佳實(shí)踐是不要在容器內(nèi)運(yùn)行有狀態(tài)的服務(wù)——它更適合沒(méi)有狀態(tài)的服務(wù)——因此,彌合這兩個(gè)稍微正交的方式需要一些特殊的考量。
InfoQ:在新特性和功能增強(qiáng)方面,Kafka有什么規(guī)劃?
Adler & Noll:在接下來(lái)的發(fā)布版本中,Apache Kafka社區(qū)規(guī)劃關(guān)注于運(yùn)維的簡(jiǎn)便性和更強(qiáng)的投遞可靠性。這部分工作包括Apache Kafka中改進(jìn)的數(shù)據(jù)平衡、更多的安全增強(qiáng)并支持精確的單次投遞。Confluent Platform將會(huì)具有更多的客戶(hù)端、連接器,在Confluent Control Center中則會(huì)擴(kuò)展監(jiān)控和管理功能。同時(shí),Kafka Streams的第一個(gè)版本已經(jīng)隨Kafka 0.10一起發(fā)布了,Kafka社區(qū)和Confluent將會(huì)繼續(xù)致力于擴(kuò)展Kafka Streams的功能。我們正在進(jìn)行的一個(gè)特性就是在實(shí)現(xiàn)流處理應(yīng)用的時(shí)候,可以使用的一個(gè)SQL接口。這是我們想要包含進(jìn)來(lái)的一個(gè)特性,它有助于擴(kuò)展Kafka Streams的用戶(hù)基礎(chǔ),也能在總體上提升流處理能力。