1. 程式人生 > >Kafka High Level API vs. Low Level API

Kafka High Level API vs. Low Level API

目錄:
1.ConsumerApi
2.High Level Consumer (遮蔽細節管理)
3.Low Level API (細節需要自己處理)

1.Kafka提供了兩種Consumer API

High Level Consumer API
Low Level Consumer API(Kafka詭異的稱之為Simple Consumer API,實際上非常複雜)
在選用哪種Consumer API時,首先要弄清楚這兩種API的工作原理,能做什麼不能做什麼,能做的話怎麼做的以及用的時候,有哪些可能的問題

2.High Level Consumer API概述

High Level Consumer API圍繞著Consumer Group這個邏輯概念展開,它遮蔽了每個Topic的每個Partition的Offset管理(自動讀取zookeeper中該Consumer group的last offset )、Broker失敗轉移以及增減Partition、Consumer時的負載均衡(當Partition和Consumer增減時,Kafka自動進行負載均衡)
對於多個Partition,多個Consumer
如果consumer比partition多,是浪費,因為kafka的設計是在一個partition上是不允許併發的,所以consumer數不要大於partition數
如果consumer比partition少,一個consumer會對應於多個partitions,這裡主要合理分配consumer數和partition數,否則會導致partition裡面的資料被取的不均勻。最好partiton數目是consumer數目的整數倍,所以partition數目很重要,比如取24,就很容易設定consumer數目
如果consumer從多個partition讀到資料,不保證資料間的順序性,kafka只保證在一個partition上資料是有序的,但多個partition,根據你讀的順序會有不同
增減consumer,broker,partition會導致rebalance,所以rebalance後consumer對應的partition會發生變化
High-level介面中獲取不到資料的時候是會block的
關於Offset初始值的問題:
先produce一些資料,然後再用consumer讀的話,需要加上一句offset讀取設定

props.put("auto.offset.reset", "smallest"); //必須要加,如果要讀舊資料  

因為初始的offset預設是非法的,然後這個設定的意思 是,當offset非法時,如何修正offset,預設是largest,即最新,所以不加這個配置,你是讀不到你之前produce的資料的,而且這個 時候你再加上smallest配置也沒用了,因為此時offset是合法的,不會再被修正了,需要手工或用工具改重置offset

3. Low Level Consumer API概述

3.1Low Level Consumer API控制靈活性
Low Level Consumer API,作為底層的Consumer API,提供了消費Kafka Message更大的控制,如:
Read a message multiple times(重複讀取)
Consume only a subset of the partitions in a topic in a process(跳讀)
Manage transactions to make sure a message is processed once and only once(Exactly Once原語)

3.2 Low Level Consumer API的複雜性
軟體沒有銀彈,Low Level Consumer API提供更大靈活控制是以複雜性為代價的:
Offset不再透明
Broker自動失敗轉移需要處理
增加Consumer、Partition、Broker需要自己做負載均衡

You must keep track of the offsets in your application to know where you left off consuming.(Offset自己管理)
You must figure out which Broker is the lead Broker for a topic and partition(如果一個Partition有多個副本,那麼Lead Partition所在的Broker就稱為這個Partition的Lead Broker)
You must handle Broker leader changes(Broker Leader是個什麼概念)

3.3 使用Low Level Consumer API的步驟
Find an active Broker and find out which Broker is the leader for your topic and partition
Determine who the replica Brokers are for your topic and partition
Build the request defining what data you are interested in
Fetch the data
Identify and recover from leader changes

相關推薦

Kafka High Level API vs. Low Level API

目錄: 1.ConsumerApi 2.High Level Consumer (遮蔽細節管理) 3.Low Level API (細節需要自己處理) 1.Kafka提供了兩種Consumer API High Level Consumer API

Qt外掛開發入門(兩種方法:High-Level API介面,Low-Level API介面)

       Qt中為我們提供了兩種開發外掛的方式。一種是使用High-Level API介面,一種是使用Low-Level API介面。所謂High-Level API 是指通過繼承Qt為我們提供的特定的外掛基類,然後實現一些虛擬函式、新增需要的巨集即可。該種外掛開發

ARToolKit for Unity Scripting and Low-Level API

ARToolKit for Unity 程式碼編寫以及底層 API Unity 的上層程式碼編寫環境   Unity 為開發互動應用提供了一個豐富的程式設計介面。指令碼可以使用C#或是Javascript語言編寫並且可以呼叫大量的函式庫。基本來說,任何可

kafka low-level consumer詳解

kafka Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,作為大資料系統中重要的一環,目前最新版本為kafka_2.11-0.10.2.0;在0.9.0版本後就統一了consumer api,不在區分high-level和low-level,但

Kafka low level API8 Consumer

Downsides of using SimpleConsumer The SimpleConsumer does require a significant amount of work not needed in the Consumer Groups: You must keep track of t

XXX are not supported at language level ‘1.x’ ;usage API documented as @Since1.x +.

在使用intellij IDEA時,出現了編譯不成功,但是程式碼沒有問題的情況。 出錯資訊為XXX are not supported at language level ‘1.x’ 。(注:usage API documented as @Since1.x +. 同樣的解

vs開發nodejs api文檔生成神器-apidoc

inf form node apidoc http 目的 reg pid error 直接生成文檔的神器 apidoc 1 win+R 輸入 cmd 回車 然後進入 nodejs 項目目錄 例如 D:\NodeTest\newApp1 2 用npm安裝 apidoc

Orabbix 監控oracle表空間 Low Level Discovery

Oracle 表空間監控 在被監控端創建腳本,此腳本用於獲取表空間及空間使用信息,此腳本由oracle用戶下創建vim mornitor_tbs.sh#!/bin/bash source /home/oracle/.bash_profile sqlplus -s zabbix/zabbix > /tmp

Zabbix監控Low level discovery實時監控網站URL狀態

discovery 分鐘 pre local 自定義 site 端口 ++ key值 今天我們來聊一聊Low level discovery這個功能,我們為什麽要用到loe level discovery這個功能呢? 很多時候,在使用zabbix監控一些東西,需要對類似於I

zabbix自定義自動發現服務(low-level-discovery)監控系統服務

51cto 觸發 機器 相關信息 agentd 格式 int lse 監控 一、概述 由於工作關系很久沒有更新博客了,本文基於生產配置,是zabbix系列的另一補充;本次要講的是zabbix Low-level discovery簡稱(LLD),我們在配置items(監控項

Low Level Reader Protocol (LLRP) 簡介

標準描述了RFID閱讀器和客戶端之間的介面。是面向訊息的協議。 需要使用者自己保持客戶端和閱讀器間的狀態一致性。 客戶端發起的到閱讀器的訊息: 設定閱讀器的配置 讀取閱讀器的配置 發現閱讀器的能力 管理inventory操作 管理訪問操作 閱讀器發起的到客戶端的訊息:

TensorFlow Low-Level-APIs Graphs and Sessions學習筆記

Graphs and Sessions 本文翻譯自tensorflow官方網站的教程,只作為個人學習筆記,請勿用作商業用途。 tf使用一個數據流圖去表示使用Operation構建起來的計算流程,在low level api上需要和計算圖打交道,定義圖然後使用

TensorFlow Low-Level-APIs Save and Restore學習筆記

Save and Restore 本文翻譯自tensorflow官方網站的教程,只作為個人學習筆記,請勿用作商業用途。 tf.train.Saver類提供了儲存和提取模型的方法。tf.saved_model.simple_save函式也是一種簡單的方法來儲存模型

【論文閱讀】Learning Dual Convolutional Neural Networks for Low-Level Vision

論文閱讀(【CVPR2018】Jinshan Pan - Learning Dual Convolutional Neural Networks for Low-Level Vision)      本文針對低層視覺問題,提出了一般性的用於解決低層視覺問題的對偶卷積神經網路。作者認為,低層視覺問題,如常見的有

zabbix應用之Low-level discovery監控磁碟IO

轉自:http://www.tuicool.com/articles/fYjQ7j zabbix自帶的“Template OS Linux”模板支援監控已掛載的磁碟空間利用率,是利用LLD(Low-level discovery)實現的,卻沒有對磁碟IO監控。本篇文章

Kafka學習之consumer端部署及API

1、consumer.properties:檔案位於/resources目錄下 zookeeper.connect=192.168.0.1:2181test-datacenter/test-server # timeout in ms for connecting to

Low Level Image Processing論文記錄(個人)

Low Level Reconfiguring the Imaging Pipeline ★★ [Paper] Reconfiguring the Imaging Pipeline for Comp

SQL injection on DVWA (Low Level)

首先看看輸入正常的ID得到什麼結果: 當輸入1‘ 時: 說明了這個id的型別是個string,資料庫是MySQL 當輸入1’ and '1'='1時,and後面的1=1是個永真式: 當輸入1‘ or '1'='1是,這個式子是個永真式,返回所有結果: 確定資

kafka (搜索) 在idea api操作(官方apihttp://kafka.apache.org/documentation/#producerapi)

減少 tails ray valueof 記錄 org 代理 交互 為我 https://blog.csdn.net/isea533/article/details/73822881 這個不推薦,可以看一下(https://www.cnblogs.c

一個快取使用的思考:Spring Cache VS Caffeine 原生 API

最近在學習本地快取發現,在 Spring 技術棧的開發中,既可以使用 Spring Cache 的註解形式操作快取,也可用各種快取方案的原生 API。那麼是否 Spring 官方提供的就是最合適的方案呢?那麼本文將通過一個案例來為你揭曉。 Spring Cache Since version 3.1, th