原创 JAVA性能分析之使用火焰圖

隨着業務的發展,使用接口提供的服務的業務越來越多,不同的業務對調用耗時的要求不同,當然,耗時越少越好。而近來已經有三四個調用方反映接口調用耗時太不穩定,代碼上的優化已經做了很多,有效果,但還不夠。同時,壓力測試顯示,複雜業務在調用量單機3

原创 Kafka源碼閱讀 —— KafkaController(4)

在kafka 0.8以後開始提供High Availability機制,即一個broker宕機後可以不影響服務。在集羣規模越來越大的今天,HA對於消息中間件至關重要。 broker startup “Kafka源碼閱讀 —— KafkaC

原创 KAFKA源碼閱讀——ReplicaFetcherManager,同步log

在ReplicaManager.makeFollowers函數中,對於成爲Follower的broker,需要執行這麼一段代碼: val partitionsToMakeFollowerWithLeaderAndOffset = part

原创 Kafka源碼閱讀 —— KafkaController(1)

KafkaController 啓動 在KafkaServer.startup()中,KafkaController對象被構建,在啓動KafkaApis、replicaManager後,KafkaController.startup()被

原创 Kafka源碼閱讀 —— KafkaController(5)

重新分配 replica 當新增機器到集羣中時,可能需要調整topic下partition的replica分配。kafka不會根據負載自動調整replica assignment,這時候就需要集羣管理員手動調整。 下面的例子是將foo1

原创 數據從kafka到hive(2)

前面一篇講到了將數據從kafka讀到hdfs使用了開源工具camus,既然用到了開源的代碼,免不了研究一下實現過程。所以這裏分享一下閱讀camus代碼瞭解到的一些細節。 前置知識 在講camus之前,需要提一下hadoop的一些知識。

原创 MQ消息處理感悟

MQ消息處理感悟 項目需要獲取MQ消息,之後用xml工具進行解析,再把解析後的數據插入數據庫。本來幾天做完的項目,期間遇到了各種坑,拖了一個多星期才預發佈。 遇到的第一個坑就是收不到MQ消息,後來又只能能收到隊列中積壓的消息,之後的消息都

原创 zookeeper學習

在去年準備面試的時候,有一個問題被問到過兩次:如何實現一個跨進程、跨主機的分佈式鎖。這個問題我當時有查過,一種是通過Redis,另一種是通過zookeeper,因爲當時還沒有學習java,所以沒有研究過zookeeper。 但是上週因爲

原创 數據從kafka到hive(1)

背景 公司的系統是一個對外提供服務的接口,每一次調用日誌都需要保存到hive中,以便後期做數據分析。每天的調用量在億級,日誌數據量100G以上,在量級還沒有這麼大的時候,採取的辦法比較原始:直接通過log4j打印到日誌文件,然後通過抽數工

原创 Kafka源碼閱讀 —— KafkaController(3)

執行 kafka-topics.sh –create Kafka官網給出的創建Topic的命令如下: bin/kafka-topics.sh --create --zookeeper localhost:2181 --replicati

原创 關於jdbc事務自動提交

實現jdbc事務流程: 建立數據庫連接; 將autoCommit設置爲false; 執行sql語句; 提交; 處理異常,如果sql語句執行失敗則執行rollBack; 其中,如果執行sql語句過程中拋出異常,不調用commit,提交不

原创 java讀取文件的幾種方式

java讀取文件的幾種方式 直接上代碼 public class ReadFromFile { /** * 以字節爲單位讀取文件,常用於讀二進制文件,如圖片、聲音、影像等文件。 */ public st

原创 KAFKA源碼閱讀——FetchRequestPurgatory, ProducerRequestPurgatory

RequestPurgatory purgatory,煉獄的意思。第一次看RequestPurgatory類的代碼時,一頭霧水,不明白是幹什麼的。要理解這個,需要先理解kafka處理FetchRequest和ProduceRequest的

原创 Kafka源碼閱讀 —— KafkaController(2)

Controller與broker之間的消息通道 當Controller做出動作時,需要向集羣中的broker發送控制消息。發送的消息三種:LeaderAndIsrRequest、UpdateMetadataRequest和StopRep