這篇是根據 KK Learn By Doing: Beginner’s Guide to Apache Kafka - Foundation and Development 所做的筆記與實作紀錄。
學習目標是要能夠將 Kafka architecture 以及 essential components 套用在服務紀錄需求面,只是這 2.5 小時的課可能還是遠遠不夠,都有人把 Kafka 寫成 30 篇系列文章了。
A distributed event streaming platform, widely used for building real-time data pipelines and applications
01 introduction to Kafka Kafka 是開源分布式事件串流平台 (open-sourced, distributed, event streaming platform),由 Apache Software Foundation 開發,原本是 LinkedIn 建立,在 2011 年開源。
Kafka 是設計來處理實時資料,協助組織建構穩定、可擴充、且容錯率高的資料管線。
Core components Producer : 將 record 送往 Kafka topics 的 app,負責選擇要將 record 送到該 topic 中的哪一個 partition Consumer : 從 Kafka topics 讀取 record 的 app,consumer 訂閱 topics 並將訊息作即時處理 Broker : 運行 Kafka 的伺服器,broker 從 producer 接收訊息,存在 disk,再將其發送到 consumers。一個 Kafka cluster 包含多個 brokers,用來確保負載平衡與容錯率 Topic : 是一個 logical channel,使 producer 用以發送 record,consumer 用以讀取 record。為了平行化與可擴張性,topic 會分片 (partitioned) Partition: 每個 topic 都拆分成 partitions,這個 partition 是有序且不可變的紀錄序列 (sequence of records),使 Kafka 能夠水平擴展並在每個 partition 裡面維持紀錄順序 ZooKeeper or Kraft: 用來做分布式協調、配置管理、Kafka broker 與 topics 的主節點選舉 Kafka architecture Topics & Partitions: Topic 再切分成 partitions,partition 是平行化跟可擴張性的基礎單位。每一個 partition 都是有序不可變的紀錄序列。partition 當中的每一個 record 都會分配到一個唯一的偏移量 (unique offset)。partitions 使得 Kafka 藉由分布式資料以及負載於多個 brokers 這兩種方式,達到可擴展性。 Producers & Consumers: Kafka 支援 pub-sub 模型,多個 conusmer 可以訂閱到相同一個 topic,並獨立處理 data。 Brokers & Clusters: Kafka broker 負責儲存與提供資料。Kafka cluster 包含多個 brokers 用來確保容錯性與高可用性。Brokers 分布在不同個 machines 以避免硬體故障造成資料遺失。 Zooker Coordination : Zookeeper 或 KRaft 管理配置檔以及 Kafka broker 之間合作,協助進行 partitions 主節點選舉,追蹤 broker metadata。但 Kafka 從 verion 2.
KCNA Container and Orchestration
The matrix from hell
Web server, database, messaging, orchestration OS, hardware infrastructure libraries, dependencies Module 2 Quiz (failed ones only) How can you specify a specific runtime endpoint when using the CRI control tool?
Setting the CONTAINER_RUNTIME_ENDPOINT environment variable,
Using the --runtime-endpoint command line option
Why do Docker images continue to work seamlessly in Kubernetes even after the removal of Docker support?
Because Docker images adhere to the Open Container Initiative (OCI) standard
由於最近工作上要從自建的網關轉移到 Kong 這個雲原生產品做 API Gateway,怕自己學不成,反而被派去從零開始學寫系統分析,又看到 Kong Gateway Certified Associate Exam 有相關的三個 Lab 可以跟著實作,所以決定寫一篇學習筆記,並且嘗試將自己理解的 Kong 寫下來當作 output 介紹給潛在讀者。
註:有人唸成『控』、但是 Youtube 的 Kong 官方頻道是唸作『抗』,就是香港 / 香江的『Kong』
References Education Konghq.com 裡面主要使用以下幾個 courses,註冊帳號後即可 enroll ,但一旦 enroll 了就有三天 due date 期限 KGLL-101 Getting Started with Kong Gateway - Services, Routes, Plugins & Consumers KGLL-103 Logging and Analyzing Operational Metrics with Kong KGLL-106 Reduce the Risk of New Software Versions with Canary Deployments Kong Inc Youtube 官方影片 Kong Gateway Documentation Core entities Services
阿炆今年轉職前跟主管聊聊,說想學習 K8S 跟 AWS 微服務架構,所以離開了需要一直不停面試的乙方公司。
阿炆入職後學習使用了很多 CNCF 專案,像是 Kubernetes、ArgoCD、Keycloak、Prometheus、HELM、Longhorn,另外也考了一個 AWS 證照。
阿炆準備 AWS SAA-C03 之前一直陸陸續續的看函授自學線性代數跟離散數學,考完 AWS 之後覺得剩五個月時間不太夠了,加上一直以為自己試用期還沒結束,只是延長了,於是找新主管 one-on-one meeting 談談工作表現與規劃。
於是隔天下班前臨時多了個團咪,前一小時確實是在談專案進度,後一個半小時在閒聊,看起來寄出離職信太不給面子了。週末 K 完線性代數第四章的阿炆,回到沒放三明治假的公司,在最簡短的 stand-up meeting 開完後,跑到 Cloud Native User Group 搜尋 CKA 關鍵字,希望也有好心人分享考試心得。
說到 K8S,阿炆幾年前剛畢業有聽過這個名詞,那時候還很天兵的一為它跟 evernote 是同一路的 (明明用途完全不一樣,撰寫的語言還一個 Go 另一個 C++)。後來轉職培訓班畢業後的第一個 mentor,因為有 CKA 證照被認為是部門內的大將。後來某頂大丁組說明會也有一個組別就特別是 K8S 系統組。
阿炆一直認為自己非理組大學出身,沒有碩班,沒本科畢業是面試征戰的阿基里斯硬傷,聽完招生說明會覺得這 K8S 肯定是不弄懂不痛快了,於是立刻打開 bilibili 從黑馬程序員教你 Kubernetes 開始看。
接著過完年聽到同事面試台達電駐點也要求懂容器化技術,開始改看 TechWorld NaNa 的 Kubernetes 課程,一小時跟三個多小時的 youtube 影片都看過了,甚至三月份的知識分享小聚也講了 30 分鐘,面試收到 offer 之後也買了 kodekloud 的 CKA 課程以精進實力。
但是江湖中關於 kubernetes 學習曲線的風評如下:
本文有重新排版放到 medium … Go to Medium story
準備心得 八月中旬自主模擬小考的期間,看完 ExamTopics 前 240 題之後,我發現 AWS Educate 暑期陪跑計畫的 Discord 群組有好心人分享使用關鍵字可以 Google Search 搜尋到剩下 241 ~ 981 題絕大多數的題目,所以我的做法是把這些一個個 copy 下來。聽起來很蠢,但因為它有些頁面都需要用 reCAPTCHA 之類的驗證碼確認是不是真人才能開啟,就沒有考慮研究網路爬蟲來節省時間了。
另外也有使用 Google Apps Script 將存下來的題庫 google docs 轉成 google sheet,加上 Line Notify 並且紀錄每題發送次數的小功能,這樣用餐、吃飯時間、睡前、上洗手間、等火車這些零碎的滑手機時間,都會有 line 小幫手每 30 分鐘丟給你一個題目以及精選 discussion,實在是太有助於時間不夠的考生了!(絕對不是因為line通知太煩所以提前測驗的)
測驗過程 原本因為 voucher 通知信上說考照成功獎需要在9/27前考照成功,才有資格申請,所以排 9/20 週五晚上考試。但後來 9/2 全部將 ExamTopics 的題目收進複習的小本之後,覺得一直刷題實在很沒趣,有更重要的 Keycloak 升級與 Kubernetes 實務一把火在燒,所以隔天就手刀上 PearsonVue 測驗登記網站提前測驗日期了。
提前測驗的行為現在想來真是一步險棋,因為我到 9/5 晚上六點半測驗前都還沒有全部重看完所有考古 981 題。加上台北 PearsonVue 考場實在有夠冷,坐在一間長寬約 100 cm 的單人間座位,看著考試介面上字體被拉寬 10~20% 的英文題目,總時長 140 分鐘一共 65 題。
Motivation 自從去年八月考過 GCP PCA 之後,發現 (1) 想去的幾家公司使用的雲服務供應商都是用 AWS 居多,加上 (2) 某次聚會上遇到的進外商的優秀前同事有 AWS SAA-C03 證照,(3) 今年 AWS 新聞說要在台灣設立資料中心,以及 (4) 前公司提供了 AWS 考照半價補助但沒機會用到,還有 (5) 在 Facebook 社團看到 AWS 官方提供了兩種考照半價優惠的方案(一個要組隊報名,另一個只要在時限前完成官方部分課程)。
基於看到 Educate Program 再過一天就要報名截止的心態,我刻不容緩的完成兩章的指定課程,趕緊送出申請,並且在一週後的星期三收到報名成功通知信。
Requirement 報名成功通知信主要有三個重點:
要完成三個任務才能再填表單申請半價考試券 voucher
完成 skills builder 某一個課程(要提供課程完成100%截圖) 在 skills builder 某一個 exam set 考試達到 72 / 100 的成績 提供了一個 Notion URL 以及一個 Discord URL
可以在 notion 裡面看到其他人的考試心得、考古題資源還有 AWS 學習影片 9/27 之前考試通過的話可以拿到 AWS 背包或者 AWS T-Shirt;分享心得可以拿到筆電支架
許願 SAA 考過是拿到 T-shirt,但是 8/19 的考試券通知信是公告背包,也許可以拿來當地震逃難包的選手之一(?)