Kafka2.0生產者客戶端使用

1 初始化配置

??Kafka 通過 KafkaProducer 構造器初始化生產者客戶端的配置。
??常用的重要配置,詳見官網。

  • bootstrap.servers:Kafka 集群地址(host1:post,host2:post),Kafka 客戶端初始化時會自動發現地址,所以可以不填寫所有地址。
  • key.serializer:實現了 Kafka 序列化接口的類,用來序列化 key。
  • value.serializer:實現了 Kafka 序列化接口的類,用來序列化 value。
  • acks:leader 接收到的 follower 確認的數量需要滿足 acks 的配置。
    ?0:生產者把消息發送出去就認為發送完成了。
    ?1:leader 接收到消息后,不用等 follower 的確認,就表示發送完成了。
    ?all/-1:leader 接收到消息后,需要所有在 ISR 集合的 follower 確認后,才表示完成了。
  • retries:消息發送失敗后的重試次數。如果允許重試,而 max.in.flight.requests.per.connection>1,則可能導致消息亂序,因為如果把兩批消息發送到同一個分區,第一批失敗并重試,而第二批成功了,則第二批消息可能先生成了。
  • retry.backoff.ms:消息重試發送的間隔。
  • client.id:標識客戶端的 id。
  • compression.type:壓縮類型。可選:none、gzip、snappy、lz4。
  • buffer.memory:記錄累加器可以使用的最大內存緩沖池大小。
  • batch.size:內存緩沖池的緩沖列表大小。當 batch 的大小超過 batch.size 或者時間達到 linger.ms 就會發送 batch。
  • transactional.id:事務 ID。
// 基礎配置
Map<String, Object> configs = new HashMap<>();
// Kafka broker 集群
configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094");
// key 序列化
configs.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
// value 序列化
configs.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);KafkaProducer<String, String> producer = new KafkaProducer<>(configs);

2 構造消息

??Kafka 提供了6種構造器來構造消息。

  • topic:消息主題,必填;
  • partition:分區號,非必填。如果為空,會計算 key 的 hash 值,再和該主題的分區總數取余得到分區號;如果 key 也為空,客戶端會生成遞增的隨機整數,再和該主題的分區總數區域得到分區號。
  • timestamp:時間戳,非必填。如果為空,默認為 KafkaProducer 構造器初始化的時間。
  • key:消息 key,非必填。關系到分區分配,broker 會對帶 key 的消息進行日志壓縮。
  • value:消息內容,必填。
  • headers:消息頭,非必填。
public ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value, Iterable<Header> headers);
public ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value);
public ProducerRecord(String topic, Integer partition, K key, V value, Iterable<Header> headers);
public ProducerRecord(String topic, Integer partition, K key, V value);
public ProducerRecord(String topic, K key, V value);
public ProducerRecord(String topic, V value);

3 發送消息

??支持同步發送和異步發送消息。

??同步發送

producer.send(record).get();

??異步發送

producer.send(record, new Callback() {@Overridepublic void onCompletion(RecordMetadata metadata, Exception exception) {// 回調處理流程}
});

轉載于:https://www.cnblogs.com/bigshark/p/11182403.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247659.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vuex小例

少廢話&#xff0c;先出東西 vuex main.js import Vue from vue import App from ./App import router from ./router import store from ./store Vue.config.productionTip falsenew Vue({el: #app,router,store,render: xx>xx(App) })store.js 平級目錄未建文件夾import…

[論文筆記]CVPR2017_Joint Detection and Identification Feature Learning for Person Search

Title: Joint Detection and Identification Feature Learning for Person Search; aXiv上該論文的第一個版本題目是 End-to-End Deep Learning for Person SearchAuthors: Tong Xiao1* ; Shuang Li1* ; Bochao Wang2 ; Liang Lin2; Xiaogang Wang1 Affilations: 1.The Chines…

php下的原生ajax請求

瀏覽器中為我們提供了一個JS對象XMLHttpRequet&#xff0c;它可以幫助我們發送HTTP請求&#xff0c;并接受服務端的響應。 意味著我們的瀏覽器不提交&#xff0c;通過JS就可以請求服務器。ajax(Asynchronous Javascript And XML)其實就是通過XHR對象&#xff0c;執行HTTP請求。…

HBase性能優化總結

HBase性能優化方法總結&#xff08;一&#xff09;&#xff1a;表的設計 1. 表的設計 1.1 Pre-Creating Regions 默認情況下&#xff0c;在創建HBase表的時候會自動創建一個region分區&#xff0c;當導入數據的時候&#xff0c;所有的HBase客戶端都向這一個region寫數據&#x…

.NetCore如何使用ImageSharp進行圖片的生成

ImageSharp是對NetCore平臺擴展的一個圖像處理方案&#xff0c;以往網上的案例多以生成文字及畫出簡單圖形、驗證碼等方式進行探討和實踐。 今天我分享一下所在公司項目的實際應用案例&#xff0c;導出微信二維碼圖片&#xff0c;圓形頭像等等。 一、源碼獲取 Git項目地址&…

vue2工程

vue當然可以使用script標簽引入&#xff0c;不需任何依賴即可按照vue的語法進行使用。但中大型商用項目中&#xff0c;還是建議使用工程化方式使用vue&#xff0c;vue提供了官方腳手架vue-cli&#xff0c;可以快速構建vue項目&#xff0c;腳手架會幫助開發者創建好建議的工程目…

flutte的第一個hello world程序

用命令行創建項目&#xff1a; flutter create flutterdemo VSCode或者AS連接手機后 輸入 flutter run 編譯后就可以將默認的代碼顯示在手機上了 開始寫hello world 代碼&#xff0c;這段代碼寫在根目錄\lib\main.dart文件中&#xff0c;也是Flutter主文件。 整個代碼如下 impo…

Ajax 設置Access-Control-Allow-Origin實現跨域訪問

之前遇到的問題整理 ajax跨域訪問是一個老問題了&#xff0c;解決方法很多&#xff0c;比較常用的是JSONP方法&#xff0c;JSONP方法是一種非官方方法&#xff0c;而且這種方法只支持GET方式&#xff0c;不如POST方式安全。 即使使用jquery的jsonp方法&#xff0c;type設為POST…

vue工程webpack模板配置說明

vue工程webpack模板下的配置文件非常多&#xff0c;只能在實際開發過程中反復熟悉&#xff0c;才能漸漸體會官方將配置文件拆分細化的合理性。 主要配置文件中代碼的作用從網上摘錄了比較全的一份注釋&#xff0c;做下記錄。 dev-server.js 開發服務端配置 require(./check-v…

目錄的拼接

找到被拼接文件所在的目錄&#xff0c;然后進行拼接 import os 獲取當前目錄&#xff1a; os.path.dirname(__file__) 如下&#xff0c;被拼接文件所在目錄與當前目錄的上級目錄在同一文件夾下&#xff1a; os.path.join(os.path.dirname(os.path.dirname(__file__)),‘文件夾路…

vue-resource 攔截器(interceptor)的使用

攔截器-interceptor 在現代的一些前端框架上&#xff0c;攔截器基本上是很基礎但很重要的一環&#xff0c;比如Angular原生就支持攔截器配置&#xff0c;VUE的Axios模塊也給我們提供了攔截器配置&#xff0c;那么攔截器到底是什么&#xff0c;它有什么用&#xff1f;攔截器能幫…

【GamePlay】入門篇

【GamePlay】入門篇 游戲性編程是指通過一系列游戲系統將游戲想法變成現實的過程。 本次的簡例以NPC設計為主。 通常在進行腳本設計前&#xff0c;對NPC的屬性進行基本的添加和設定&#xff0c;諸如動畫系統、物理系統等等。 1.動畫系統 添加Animator組件&#xff0c;綁定骨骼。…

vue axios POST請求中參數以form data和request payload形式的原因

HTTP請求中&#xff0c;如果是get請求&#xff0c;那么表單參數以namevalue&name1value1的形式附到url的后面&#xff0c;如果是post請求&#xff0c;那么表單參數是在請求體中&#xff0c;也是以namevalue&name1value1的形式在請求體中。通過chrome的開發者工具可以看…

vue-resource使用

vue-resource是一個http請求插件&#xff0c;遵循promise&#xff0c;類似jquery中ajax操作。 vue-resource已不被官方推薦&#xff0c;官方推薦axios插件來操作http協議。 vue-resource中提供的方法 get(url, [options]) head(url, [options]) delete(url, [options]) jso…

HttpHttps

http協議與https Http 客戶端發送一個HTTP請求到服務器的請求消息包括以下格式&#xff1a; **請求行&#xff08;request line&#xff09;、請求頭部&#xff08;header&#xff09;、空行 和請求數據四個部分組成。** Get請求例子&#xff0c;使用Charles抓取的request&…

vue2使用axios post跳坑,封裝成模塊

終于將vue-resource替換成axios了&#xff0c;其中像application/x-www-form-urlencoded發送的頭信息以及返回的response結果這兩點都需要注意一下。 其實https://github.com/mzabriskie/axios也有說明的。因為我在vue-resource中使用了Vue.http.options.emulateJSON true;&am…

axios使用

axios和vue-resource一樣&#xff0c;是一個vue中操作http的插件&#xff0c;遵循promise&#xff0c;vue官方也推薦使用axios。 安裝axios npm i axios -S axios也是在運行時需要的&#xff0c;所以要保存在dependencies中。 引入axios import axios from axios Vue.proto…

jQuery length 和 size()區別

jQuery length和size()區別總結如下&#xff1a; 1.length是屬性&#xff0c;size()是方法。 2.如果你只是想獲取元素的個數&#xff0c;兩者效果一樣既 $("img").length 和 $("img").size() 獲取的值是一樣的&#xff1b;但是如果是獲取字符串的長…

一些關于自己的未來的東西

2019.7.4 自己大一建立對編程的基礎認識&#xff0c;確實培養了一些興趣&#xff0c;入了個門&#xff0c;不過沒有接觸到本質。大二加入到了學校的網站開發團隊&#xff0c;對網站開發后端進行了學習&#xff0c;對后臺開發也有了基礎的學習吧&#xff0c;哈哈可能以后就是要走…

Javascript面向對象編程:構造函數的繼承

今天要介紹的是&#xff0c;對象之間的"繼承"的五種方法。 比如&#xff0c;現在有一個"動物"對象的構造函數。 function Animal(){ this.species "動物"; } 還有一個"貓"對象的構造函數。 function Cat(name,color){ this.name nam…