原创 中通消息平臺 Kafka 順序消費線程模型的實踐與優化

各類消息中間件對順序消息實現的做法是將具有順序性的一類消息發往相同的主題分區中,只需要將這類消息設置相同的 Key 即可,而 Kafka 會在任意時刻保證一個消費組同時只能有一個消費者監聽消費,因此可在消費時按分區進行順序消費,保證每個分區

原创 深度剖析 Kafka Producer 的緩衝池機制【圖解 + 源碼分析】

上次跟大家分享的文章「Kafka Producer 異步發送消息居然也會阻塞?」中提到了緩衝池,後面再經過一番閱讀源碼後,發現了這個緩衝池設計的很棒,被它的設計思想優雅到了,所以忍不住跟大家繼續分享一波。 在新版的 Kafka Produc

原创 圖解 DataX 核心設計原理

DataX 是阿里巴巴開源的一個異構數據源離線同步工具,致力於實現包括關係型數據庫(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各種異構數據源之間穩定高效的數據同步功能。 前段時間我在 K8s 相關文

原创 使用 K8s 進行作業調度實戰分享

最近在公司的數據同步項目(以下簡稱 ZDTP)中,需要使用到分佈式調度數據同步執行單元,目前使用的方案是將數據同步執行單元打包成鏡像,使用 K8s 進行調度。 在 ZDTP 中,數據同步的動作可抽象成一個執行單元(以下稱爲 worker),

原创 圖解 K8s 核心概念和術語

我第一次接觸容器編排調度工具是 Docker 自家的 Docker Swarm,主要解決當時公司內部業務項目部署繁瑣的問題,我記得當時項目實現容器化之後,花在項目部署運維的時間大大減少了,當時覺得這玩意還挺新鮮的,原來自動化運維可以這麼玩。

原创 Seata RPC 模塊的重構之路

RPC 模塊是我最初研究 Seata 源碼開始的地方,因此我對 Seata 的 RPC 模塊有過一些深刻研究,在我研究了一番後,發現 RPC 模塊中的代碼需要進行優化,使得代碼更加優雅,交互邏輯更加清晰易懂,本着 “讓天下沒有難懂的 RPC

原创 Spring 異步實現原理與實戰分享

最近因爲全鏈路壓測項目需要對用戶自定義線程池 Bean 進行適配工作,我們知道全鏈路壓測的核心思想是對流量壓測進行標記,因此我們需要給壓測的流量請求進行打標,並在鏈路中進行傳遞,那麼問題來了,如果項目中使用了多線程處理業務,就會造成父子線程

原创 我參與 Seata 開源項目的一些感悟

丁老師在他的知識星球邀請我回答以下一個問題: 我覺得這個問題非常有意思,姑且把它貼到公衆號這裏,與大家分享一下我對這個問題的一些感悟。 感謝丁老師的邀請問答: 在這裏我就簡單說下,我這段時間參與 Seata 開源項目的一些感悟: 1、如何

原创 一次 kafka 消息堆積問題排查

收到某業務組的小夥伴發來的反饋,具體問題如下: 項目中某 kafka 消息組消費特別慢,有時候在 kafka-manager 控制檯看到有些消費者已被踢出消費組。 從服務端日誌看到如下信息: 該消費組在短時間內重平衡了 600 多次。 從

原创 圖解 Kafka 水印備份機制

高可用是很多分佈式系統中必備的特徵之一,Kafka 日誌的高可用是通過基於 leader-follower 的多副本同步實現的,每個分區下有多個副本,其中只有一個是 leader 副本,提供發送和消費消息,其餘都是 follower 副本,

原创 Seata 動態配置訂閱與降級實現原理

Seata 的動態降級需要結合配置中心的動態配置訂閱功能。動態配置訂閱,即通過配置中心監聽訂閱,根據需要讀取已更新的緩存值,ZK、Apollo、Nacos 等第三方配置中心都有現成的監聽器可實現動態刷新配置;動態降級,即通過動態更新指定配置

原创 記一次 Kafka 集羣線上擴容

前段時間收到某個 Kafka 集羣的生產客戶端反饋發送消息耗時很高,於是花了一段時間去排查這個問題,最後該集羣進行擴容,由於某些主題的當前數據量實在太大,在對這些主題遷移過程中話費了很長一段時間,不過這個過程還算順利,因爲在遷移過程中也做足

原创 關於 Kafka 的一些面試題目

上週客串了一下面試官,在這裏就簡單記錄一下期間我問到的一些關於 Kafka 的面試題目,這些都是我平時在學習 Kafka 的一些總結要點。 談談你對 kafka 的整體認識? 問這個問題主要是想知道面試者對 Kafka 的整體認識如何,

原创 Seata 配置中心實現原理

Seata 可以支持多個第三方配置中心,那麼 Seata 是如何同時兼容那麼多個配置中心的呢?下面我給大家詳細介紹下 Seata 配置中心的實現原理。 配置中心屬性加載 在 Seata 配置中心,有兩個默認的配置文件: file.conf

原创 Seata 客戶端需要同時啓動 TM 和 RM 嗎?

在分析啓動部分源碼時,我發現 GlobalTransactionScanner 會同時啓動 RM 和 TM client,但根據 Seata 的設計來看,TM 負責全局事務的操作,如果一個服務中不需要開啓全局事務,此時是不需要啓動 TM c