使用在 Kube.NETes 上運(yùn)行的 Kafka 在 API 端點之間流式傳輸消息。
Apache Kafka 不僅僅是一個消息傳遞代理。它有一個由不同組件組成的豐富生態(tài)系統(tǒng)。有用于導(dǎo)入和導(dǎo)出數(shù)據(jù)的連接器、不同的流處理庫、模式注冊表等等。在本次演講中,Red Hat Jakub Scholz的高級首席軟件工程師展示了如何使用Kafka從 Twitter 等社交網(wǎng)絡(luò)讀取數(shù)據(jù)、處理它們,并使用機(jī)器學(xué)習(xí)來分析它們——一切都在 Kubernetes 之上運(yùn)行。
雅庫布·舒爾茨:
所以我的名字是Jakub Scholz,我在 Red Hat 工作。實際上,我大部分時間都在從事 CNCF 項目,名為Strimzi,這就是在 Kubernetes 上運(yùn)行 Apache Kafka。當(dāng)然,這也是我將在今天的演講中使用的內(nèi)容。我希望你們所有人都知道和聽說過 Apache Kafka。但我認(rèn)為理解它不僅僅是一個消息傳遞代理非常重要。它是一個均勻的流媒體平臺,它是一個由不同組件和工具組成的偉大生態(tài)系統(tǒng)。其中一些是 Apache Kafka 項目本身的一部分。但其他是第一方組件、集成和連接器等,它們都與 Kafka 很好地打包在一起,并且都可以一起使用。所以總的來說,Kafka 可以很容易地處理三個不同的領(lǐng)域。在處理數(shù)據(jù)方面。
它可以完成傳遞消息的基本消息傳遞工作,但它也可以存儲消息,包括將它們存儲為長期存儲,特別是如果您使用諸如事件溯源之類的模式,您知道可以存儲如果您愿意,他們的活動會持續(xù)多年。
但它也可以處理集成。所以它有這個稱為 Kafka Connect API 的組件,它真正專注于通過將來自其他系統(tǒng)的消息導(dǎo)入 Kafka 或?qū)⑺鼈儚?Kafka 導(dǎo)出到其他一些系統(tǒng)來與其他系統(tǒng)集成。它還有自己的流處理庫,稱為 Kafka 流 API。你可以在那里做流處理,包括有狀態(tài)的、操作的、關(guān)節(jié)的等等。所以它真的是一個非常非常強(qiáng)大的庫。
在我今天的演講中,我們將使用這些東西是,我們將使用 Kafka Connect 部分,以及來自另一個 Apache 項目的連接器:Apache Commons,它也是眾所周知的,并提供了數(shù)百種不同的集成。使用 Apache Commons 的一種方式也是作為 Kafka Connect 中的連接器。所以我們將使用這個連接器連接到 Twitter API 并在 Twitter 上搜索一些推文。當(dāng)我們發(fā)現(xiàn)符合我們標(biāo)準(zhǔn)的推文時,我們將選取三個,然后將它們作為消息傳遞給我們的 Kafka 代理。從那里,我們將使用我們的流處理應(yīng)用程序來獲取它,該應(yīng)用程序?qū)⒆x取推文并使用深度 JAVA 學(xué)習(xí)庫對它們進(jìn)行一些情緒分析. 所以基本上,應(yīng)用機(jī)器學(xué)習(xí)來判斷消息的情緒,然后判斷情緒是正面還是負(fù)面,然后它基本上會識別這些消息,并通過將它們發(fā)送回 Kafka 代理來自動轉(zhuǎn)發(fā)它們,再次, Kafka Connect 會將其拾取并導(dǎo)出回 Twitter API。您將能夠?qū)⑺鼈円暈橥莆摹.?dāng)然,因為我們在 Kubernetes Day 上發(fā)布數(shù)據(jù),所以所有這些都將在 Kubernetes 之上運(yùn)行。它將使用 Strimzi 運(yùn)算符。
那么讓我們來看看它是如何工作的,以及我們?nèi)绾巫屗\(yùn)行起來。如果您想?yún)⒓哟搜菔荆梢蚤喿x一些內(nèi)容并使用此標(biāo)簽 #BYOSMA 來構(gòu)建您自己的社交媒體分析。如果你使用這個標(biāo)簽,情緒分析應(yīng)用程序應(yīng)該會自動提取并分析它,你可能會在這個演示中看到你的推文。
因此,讓我們首先切換到命令行并檢查我們已經(jīng)運(yùn)行的內(nèi)容。正如你所看到的,我已經(jīng)部署了所有東西以節(jié)省下載容器映像和啟動?xùn)|西的時間,但是我在這里運(yùn)行的是 Kafka 集群,我在這里運(yùn)行的是 Zookeeper 集群。這里我也有我的 Kafka Connect 服務(wù)器,這里是情感分析應(yīng)用程序,它將分析推文。這里重要的部分是 Strimzi 運(yùn)算符,如果您遵循運(yùn)算符的工作方式和運(yùn)算符模式,那么這就是真正運(yùn)行和管理所有這些組件的內(nèi)容,并且插入前面的討論,您當(dāng)然可以安裝它也使用 OLM 和operatorhub.io。
現(xiàn)在,簡單介紹一下operator是如何工作的,你基本上是創(chuàng)建像這樣的自定義資源,在這里你指定整個Kafka資源,包括資源、Java配置監(jiān)聽器、安全性,你可以看到只是我的一個小部署家庭集群在這里。我還可以以跟蹤或 Prometheus 指標(biāo)的形式配置授權(quán)、身份驗證、存儲、可觀察性,當(dāng)您部署它時,操作員會負(fù)責(zé)其余的工作。因為基本上,我在這里展示的所有內(nèi)容都是以聲明方式完成的,并且可以使用諸如 GitOps 之類的東西來完成。您也可以對 Kafka Connect 執(zhí)行完全相同的操作,因為 Kafka Connect 作為外部義務(wù)連接到 Kafka 代理,所以我首先必須創(chuàng)建這個 Kafka 用戶,您可以使用它來進(jìn)行身份驗證,我可以指定授權(quán)規(guī)則。然后我可以指定 Kafka Connect 部署本身,在其中指定哪些連接器插件應(yīng)加載到我的連接部署中。記住生態(tài)的東西和下載第三方插件,運(yùn)營商會自動為我和這些插件組合一個新的容器鏡像并自動部署。
然后我也可以部署實際的連接器。所以我創(chuàng)建了一個名為 Twitter 收件箱的主題。然后我創(chuàng)建了這個 Kafka 連接器,它將使用憑據(jù)連接到 Twitter API,然后它將在 Twitter 上搜索我提到的主題標(biāo)簽。每當(dāng)發(fā)布災(zāi)難消息時,它會自動從 Twitter API 中刪除,并將其作為消息發(fā)送到 Kafka 代理。我也有類似的傳出消息連接器。所以直接找到它找到的消息,最后一塊,我需要建立自己的社交媒體分析,這里是情緒分析,我再次創(chuàng)建一個 Kafka 用戶。然后它只是常規(guī)的部署綁定,這使得 Kafka 流 API 有點特別,因為它不是一些復(fù)雜的框架,有一些工作人員和一些服務(wù)器。但它實際上只是一個 Java 庫,您可以將其包含在您的應(yīng)用程序中。所以就我而言,我正在使用Quarkus框架,但您可以使用純 Java 等,您只需構(gòu)建并部署它。
現(xiàn)在當(dāng)它運(yùn)行時,你可以回到你的瀏覽器,這是我的 Twitter 帳戶,或者我的一個 Twitter 帳戶,我可以在推特上發(fā)布一些關(guān)于 Kubernetes 數(shù)據(jù)的好消息。他們開始得很好,日程安排上充滿了精彩的演講。希望這足以趕上情緒分析。現(xiàn)在我必須添加技術(shù)來構(gòu)建你自己的社交媒體分析,我現(xiàn)在可以發(fā)推文了。現(xiàn)在這個Jakubobot帳戶,這是我的機(jī)器人帳戶,我用來轉(zhuǎn)發(fā)內(nèi)容,如果我在此處按刷新,您將無法在此處看到我的推文。但是你可以看到其他各種推文,“Ricard”,我希望我發(fā)音正確,發(fā)了一年關(guān)于它的推文,它被確定為負(fù)面的。哦,那不好。看起來機(jī)器學(xué)習(xí)庫可以使用更多的訓(xùn)練,因為我沒有看到任何負(fù)面的東西。但是你可以看到它是如何轉(zhuǎn)發(fā)這些推文的,然后它趕上了,所以這個是積極的,很棒。所以我們可以看到它是如何趕上不同的推文的,以及它是如何進(jìn)行社交媒體分析的。
現(xiàn)在。沒有太多時間詳細(xì)介紹 Java 應(yīng)用程序、進(jìn)行分析以及所有 YAML 文件等,但您可以在此找到所有這些文件,第一個鏈接將您帶到 GitHub 存儲庫所有的來源。如果你愿意,你甚至可以在家里自己嘗試。感謝收看!