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