1. 程式人生 > >Kafka之sync、async以及oneway

Kafka之sync、async以及oneway

kafka有同步(sync)、非同步(async)以及oneway這三種傳送方式,某些概念上區分也可以分為同步和非同步兩種,同步和非同步的傳送方式通過“producer.type”引數指定,而oneway由“request.require.acks”引數指定。

1. sync vs async

在官方文件Producer Configs中有如下:

Property Default Description
producer.type sync This parameter specifies whether the messages are sent asynchronously in a background thread. Valid values are (1) async for asynchronous send and (2) sync for synchronous send. By setting the producer to async we allow batching together of requests (which is great for throughput) but open the possibility of a failure of the client machine dropping unsent data.

翻譯過來就是:
producer.type的預設值是sync,即同步的方式。這個引數指定了在後臺執行緒中訊息的傳送方式是同步的還是非同步的。如果設定成非同步的模式,可以執行生產者以batch的形式push資料,這樣會極大的提高broker的效能,但是這樣會增加丟失資料的風險。

對於非同步模式,還有4個配套的引數,如下:

Property Default Description
queue.buffering.max.ms 5000 啟用非同步模式時,producer快取訊息的時間。比如我們設定成1000時,它會快取1s的資料再一次傳送出去,這樣可以極大的增加broker吞吐量,但也會造成時效性的降低。
queue.buffering.max.messages 10000 啟用非同步模式時,producer快取佇列裡最大快取的訊息數量,如果超過這個值,producer就會阻塞或者丟掉訊息。
queue.enqueue.timeout.ms -1 當達到上面引數時producer會阻塞等待的時間。如果設定為0,buffer佇列滿時producer不會阻塞,訊息直接被丟掉;若設定為-1,producer會被阻塞,不會丟訊息。
batch.num.messages 200 啟用非同步模式時,一個batch快取的訊息數量。達到這個數值時,producer才會傳送訊息。(每次批量傳送的數量)

以batch的方式推送資料可以極大的提高處理效率,kafka producer可以將訊息在記憶體中累計到一定數量後作為一個batch傳送請求。batch的數量大小可以通過producer的引數(batch.num.messages)控制。通過增加batch的大小,可以減少網路請求和磁碟IO的次數,當然具體引數設定需要在效率和時效性方面做一個權衡。在比較新的版本中還有batch.size這個引數。

2. 題外話:

producers可以一步的並行向kafka傳送訊息,但是通常producer在傳送完訊息之後會得到一個響應,返回的是offset值或者傳送過程中遇到的錯誤。這其中有個非常重要的引數“request.required.acks”,這個引數決定了producer要求leader partition收到確認的副本個數,如果acks設定為0,表示producer不會等待broker的相應,所以,producer無法知道訊息是否發生成功,這樣有可能導致資料丟失,但同時,acks值為0會得到最大的系統吞吐量。若acks設定為1,表示producer會在leader partition收到訊息時得到broker的一個確認,這樣會有更好的可靠性,因為客戶端會等待知道broker確認收到訊息。若設定為-1,producer會在所有備份的partition收到訊息時得到broker的確認,這個設定可以得到最高的可靠性保證。

3. oneway

前面只提到了sync和async,那麼oneway是什麼呢?
oneway是隻顧訊息發出去而不管死活,訊息可靠性最低,但是低延遲、高吞吐,這種對於某些完全對可靠性沒有要求的場景還是適用的,即request.required.acks設定為0。

4. 一般配置

對於sync的傳送方式:
producer.type=sync
request.required.acks=1

對於async的傳送方式:
producer.type=async
request.required.acks=1
queue.buffering.max.ms=5000
queue.buffering.max.messages=10000
queue.enqueue.timeout.ms = -1
batch.num.messages=200

對於oneway的傳送傳送:
producer.type=async
request.required.acks=0

歡迎支援《RabbitMQ實戰指南》以及關注微信公眾號:朱小廝的部落格。

相關推薦

Kafkasyncasync以及oneway

kafka有同步(sync)、非同步(async)以及oneway這三種傳送方式,某些概念上區分也可以分為同步和非同步兩種,同步和非同步的傳送方式通過“producer.type”引數指定,而oneway由“request.require.acks”引數指定。

用戶認證cookiesession以及auth

Django cookie auth一、cookie和session介紹cookie不屬於http協議範圍,由於http協議無法保持狀態,但實際情況,我們卻又需要“保持狀態”,因此cookie就是在這樣一個場景下誕生。cookie的工作原理是:由服務器產生內容,瀏覽器收到請求後保存在本地;當瀏覽器再次訪問時

HashMap 源碼解析(一)使用構造以及計算容量

分享 ... 符號 term actor entryset 對象 手寫 () 簡介 HashMap 是基於哈希表的 Map 接口的實現。 它的使用頻率是非常的高。 集合和映射 作為集合框架中的一員,在深入之前, 讓我們先來簡單了解一下集合框架以及 HashMap 在集合框架

Qt線上技術交流OpenGLQuick以及所經歷專案開發心得分享

時間:3月25日晚上7:30 主題:Qt線上技術交流之OpenGL、Quick以及所經歷專案開發心得分享 直播:http://qtdream.com 主頁、全民TV,可能會加上其它的直播平臺進行轉播 錄播:http://qtdream.com/category/16 處,使用B站或者優

003——NettyBufferChannel以及多路複用器Selector

Buffer 1、緩衝區型別 2、緩衝區定義 (1)Buffer是一個物件,其中包含寫入與讀出的資料。是新IO與原IO的重要區別。任何情況下訪問NIO中的資料都需要通過快取區進行操作。 (2)Buffer在程式碼中體現就是一個數組,本質上就是記憶體中的一塊區域。 Buffer原始碼 pu

003——NettyBufferChannel以及多路復用器Selector

new byte 一個 after server 融合 必須 為什麽 分享圖片 Buffer 1、緩沖區類型 2、緩沖區定義 (1)Buffer是一個對象,其中包含寫入與讀出的數據。是新IO與原IO的重要區別。任何情況下訪問NIO中的數據都需要通過緩存區進行操作。 (2)

scala陣列操作ArrayArrayBuffer以及遍歷陣列

Array     在Scala中,Array代表的含義與Java中類似,也是長度不可改變的陣列。此外,由於Scala與Java都是執行在JVM中,雙方可以互相呼叫,因此Scala陣列的底層實際上是Java陣列。例如字串陣列在底層就是Java的String[],整數陣

Linux指令碼攻略學習筆記tpu stty以及

tput(terminal output )和stty是兩款終端處理工具。 一、tput 1.1、獲取行數和列數 tput cols tput lines 1.2、列印當前終端名 tput long

Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC@ModelAttribute@SessionAttributes以及Model的使用介紹

1、Model:儲存資料的作用域物件,相當於request 向model中新增資料,方式一,通過addAttribute方法: @RequestMapping("/save") public String save(Model model,int i

sqlite3學習初識安裝以及常用的命令

SQLite是一個軟體庫,實現了自給自足的、無伺服器的、零配置的、事務性的 SQL 資料庫引擎,它是一個零配置的資料庫,這意味著與其他資料庫一樣,我們不需要在系統中配置就可以使用,就像其他資料庫,SQLite 引擎不是一個獨立的程序,可以按應用程式需求進行靜態或動態連線,並且,它可以直接訪問其儲

Android進階篇ListViewGridView以及ScrollView實現按鈕控制滾動

這次還是一樣,因為專案需要,需要對滾動檢視需要手動控制,也就是點選上下左右按鈕,能讓滾動控制元件觸發對應的操作 在android中,滾動View最基本的有三種,分別是:ListView、GridView和ScrollView 先看效果圖:1、ListView的效果圖,右下角

Scala學習筆記 --- ArrayArrayBuffer以及遍歷陣列(1)

Array 在Scala中,Array代表的含義與Java中類似,也是長度不可改變的陣列。此外,由於Scala與Java都是執行在JVM中,雙方可以互相呼叫,因此Scala陣列的底層實際上是Java陣列。例如字串陣列在底層就是Java的String[],整數陣

js捕獲鍵盤事件keydownkeyup以及keypress

js keyup、keypress和keydown事件都是有關於鍵盤的事件 當一個按鍵被pressed 或released在每一個現代瀏覽器中,都可能有三種客戶端事件。 keydown eventkeypress eventkeyup event keydown事件發生

ActiveMQ(23):Consumer高級特性Message dispatche asyncConsumer Priority與Message Selectors

jms activemq message dispatche async consumer priority message selectors 一、Message dispatche async(消息異步分發)在activemq4.0以後,你可以選擇broker同步或異步的把消息分發給消

初學安卓開發隨筆 Menutoast 用法活動的四種啟動模式 以及 一個方便的Base活動類使用方法

pro 一點 cte edi standard oid nal xtend 解釋 Toast toast 是安卓系統的一種非常棒的提醒方式 首先定義一個彈出Toast的觸發點,比如可以是按鈕之類 其中 Toast.LENGTH_SHORT是指顯示時長 還有一個內置變量為To

selenium+python 辨識alertwindow以及操作

asm per smi get demo process live cancel ring 1.分辨 首先區別下alert、window和偽裝對話框: alert,瀏覽器彈出框,一般是用來確認某些操作、輸入簡單的text或用戶名、密碼等,根據瀏覽器的不同,彈出框的樣式也

markdown語法字體字號顏色以及背景色

AS 標簽 字號 col pre face GC ace down 字體、字號與顏色 html標簽:<font> font標簽屬性: face:字體 size:規定文本的尺寸大小。 可能的值:從 1 到 7 的數字。

promiseasync和await執行順序

() time end AI mis ont set then cti async function async1(){ console.log(‘async1 start‘) await async2() console.log(‘async1

消息隊列服務Kafka揭秘:痛點優勢以及適用場景

cli 是什麽 占滿 事務 不同之處 消息系統 監控體系 流動 系列 摘要: 消息隊列Kafka是一個分布式的、高吞吐量、高可擴展性消息隊列服務,廣泛用於日誌收集、監控數據聚合、流式數據處理、在線和離線分析等,是大數據生態中不可或缺的產品之一,阿裏雲提供全托管服務,用戶無需

1.Java基礎識別符號命名法八大基本資料型別三大引用型別運算子以及程式分支結構方法的定義過載遞迴

一、基礎匯入: 1.java採用Unicode編碼,16進位制編碼,支援世界上所有語言(GBK,gb2312,Unicode,UTF-8,ISO-8859-1)。 多執行緒---> c-編譯型語言 Test.java--原始檔,原始檔必須與主類名(public class Test