博客 / 列表

KerryWu - 記 Kafka Consumer 消息阻塞(2)

前言 這次是繼 《記 Kafka Consumer 消息阻塞(1)》 之後,其實應該是放在同一篇文章裏面。但因為是新問題,就再加一篇文章。 還是繼那篇文章,提出要調大 max.partition.fetch.bytes、message.max.bytes 的參數值。但是不能調太大,調太大之後,同樣帶來新的問題。 本次就是新問題。再調大10倍後,消費能力下降了不止100倍。 通過消費的監控圖來看,不

kafka

KerryWu - 記 Kafka Consumer 消息阻塞

事件概述 最近在接入一個新的埋點 Kafka Topic 後,遇到一個非常隱蔽的問題: 新 Topic 一直消費不到消息; 在公司 MQ 平台上查看 Topic,查不到消費組的註冊信息; 日誌平台沒有任何 Error 日誌。 消費端的邏輯是典型的主動拉取模式,由異步線程循環執行: poll() 拉取一批消息; 事務處理(讀取消息、執行腳本、寫入存儲); commit 提交偏移量。

kafka

KerryWu - 向量數據庫 - 索引

1. HNSW索引 分層可導航小世界 1.1. 定義 HNSW(Hierarchical Navigable Small World,分層可導航小世界)的核心思想是構建一個分層圖結構: 分層結構:每個數據點隨機分配一個層級,層級越高的數據點越少。 小世界圖:每層是一個“鄰接圖”,每個點只和部分點相連,圖結構保證“短路徑”導航。 導航:從高層開始,逐層向下搜索,逐步接近目標點。 生活類比

索引 , 向量

KerryWu - 使用內嵌Tomcat

1. 前言 瞭解 SpringBoot 的人對內嵌 Tomcat 應該不陌生,內嵌 Tomcat 是指將 Tomcat Servlet 容器直接集成到應用程序中,作為應用的一部分運行,而不是作為一個獨立的外部服務器。 內嵌 Tomcat 通常通過添加相關的 Tomcat 依賴到項目中來實現。在 Java 應用啓動時,Tomcat 也會隨之啓動,成為應用的一部分。這是通過編程方式創建和配置 Tomc

tomcat

KerryWu - Resteasy 基於 Tomcat 開發

1. JAX-RS 規範 JAX-RS(Java API for RESTful Web Services)是 Java 平台的一項規範,旨在為開發 RESTful Web 服務提供支持。JAX-RS 定義了一組標準的 API 和註解,使得開發者可以通過簡單的註解方式來開發基於 REST 架構風格的 Web 服務。 實現 JAX-RS 規範的產品有很多,例如:Oracle 開發的 Jersey、J

resteasy , tomcat , jax-rs

KerryWu - 瞭解HTTP/2協議

HTTP/2(2015年發佈)已經發布快10年了,雲原生社區的RPC框架中,gRPC 是直接基於 HTTP/2 實現。Dubbo 框架的默認協議,也從原先基於 TCP協議 的 dubbo協議,換成基於 HTTP/1.1、HTTP/2的 triple協議。 可能網站、框架還在使用 HTTP/1.1(1997年發佈),但隨着對系統性能的要求越來越高,HTTP/2 實在應該好好了解一番。 從 HTTP/

http-2

KerryWu - gRPC - 在 Etcd 中的應用

gRPC 作為一個高性能的遠程過程調用(RPC)框架,廣泛應用於多個領域和產品中。舉幾個比較出名的例子: Kubernetes:Kubernetes 的 API 服務器和其他組件(如 kubelet)之間的通信使用 gRPC 來實現高效的數據傳輸。 Netflix:作為流媒體服務的領導者,Netflix 需要處理大量的網絡請求和數據傳輸。Netflix 使用 gRPC 來優化服務之間的通信效

grpc , etcd

KerryWu - gRPC - 開發 2

本文是基於之前介紹 gRPC 開發文章的延續,代碼模塊介紹,也是基於之前示例代碼的延續。 1. ManagedChannel ManagedChannel 是 gRPC 中用於管理客户端和服務器之間通信的核心組件。它負責連接的創建、管理、負載均衡、流量控制等功能。以下是 ManagedChannel 的主要功能和屬性。 連接管理: ManagedChannel 負責與服務器節

grpc

KerryWu - gRPC - 介紹與開發 1

gRPC 是一個高性能、開源的遠程過程調用(RPC)框架,由 Google 開發。它旨在提供跨語言的通信能力,適用於從移動設備到數據中心服務器的各種環境。 1. 核心概念 Protocol Buffers(protobuf): gRPC 使用 Protocol Buffers 作為其接口描述語言和數據序列化協議。開發者通過定義 .proto 文件來指定服務和消息格式。Prot

grpc

KerryWu - dubbo框架 - dubbo協議介紹

1. 官網介紹 Dubbo 協議採用單一長連接和 NIO 異步通訊,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況。 1.1. 特點 dubbo RPC 是dubbo體系中最核心的一種高性能、高吞吐量的遠程調用方式,可以稱之為 多路複用的TCP長連接調用。 主要用於兩個dubbo系統之間作遠程調用,特別適合高併發、小數據的互聯網場景。反之,Dubbo 協議不適合傳

dubbo

KerryWu - dubbo框架 - 服務消費者流程

1. 前言 在 Dubbo 框架中,服務消費者通過 XML 配置方式引用服務時,涉及多個模塊之間的協作。 不放dubbo官方的設計圖了,這裏同樣放一張自己畫的服務消費者調用圖,後面的介紹也是圍繞這張圖來的。 以下是服務消費者引用服務時,各個模塊之間的源碼方法調用關係的詳細説明。 2. 簡述過程 在 dubbo-config-spring 項目模塊中,dubbo 框架定義了 dubbo.xsd。業

dubbo

KerryWu - dubbo框架 - 服務提供者流程

1. 前言 在 Dubbo 框架中,服務提供者通過 XML 配置發佈服務時,涉及多個模塊之間的協作,包括 ServiceConfig、Protocol、Exporter、Registry、Exchange 和 Transport 等。 1、官網代碼設計圖 這是官網代碼架構設計圖,主要體現各個模塊之間的調用關係。 不僅包含服務提供者調用關係,也包含服務消費者的,具體解釋看官網介紹。 為了便於

dubbo

KerryWu - ZooKeeper Curator 使用示例

1. Curator 介紹 Apache Curator 是一個用於簡化 Apache ZooKeeper 使用的 Java 庫。它提供了一組高層次的 API 和實用工具,幫助開發者更輕鬆地與 ZooKeeper 集成並使用其功能。ZooKeeper 本身是一個強大的分佈式協調服務,但其原生 API 相對底層,並且在處理連接管理、重試機制和會話恢復等方面需要較多的手動處理。Curator 旨在解決

curator , zookeeper

KerryWu - 瞭解代碼中的內存佔用

1. 前言 平時在寫代碼的時候,我們很多人基本都不太關注應用中佔用的內存,因為通常業務場景中,內存佔用量也就2、3G,不會很大。 如果併發量很高,臨時對象創建的很多,總體的內存佔用量瞬間就上去了。雖然每次請求完成後對象的引用關係解除了,對象內存會在Jvm的下一次GC中被釋放掉。但如果一直併發度高,整體來看內存佔用量不會因為GC而減少。 另外有些業務中會基於內存做緩存(如:Map、Caffeine等

內存

KerryWu - Etcd基本使用

1. 寫入 1.1. etcd一致性 etcd 提供了強一致性(Strong Consistency)。所有寫操作都必須通過當前的領導者節點(Leader),並在多數追隨者節點(Followers)確認後才會被提交。 1、工作流程 客户端將寫請求發送到領導者節點。 領導者節點將寫操作記錄到自己的日誌,然後將日誌條目複製到所有追隨者節點。 當多數節點確認收到日誌條目後,領導者節點將其標

etcd , zookeeper , watch

KerryWu - 記一次jvm調優及垃圾收集器

本文在第一段先簡單講解調優的緣由和過程,具體涉及到的知識點,在後面段中具體介紹。 1. 調優過程 1.1. 問題定位 有一天突然收到監控告警,大批量產線服務實例在自動重啓。於是趕緊上平台下載dump日誌,以及檢查其他監控事件,最終定位到問題: 那幾分鐘內,涌入幾十萬用户登錄平台操作,導致內存吃緊,幾乎每個實例都觸發了幾次 Full GC。而由於集中性的 Full GC,STW 時間過長,服務測活接

jvm調優 , 垃圾回收