spring boot3 kafka集群搭建到使用

首先自行安裝docker,通過docker容器安裝kafka
CentOS 系統 docker安裝地址

?1.pom.xml和application.properties或者application.yml文件配置

<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>
</dependency>
spring:kafka:bootstrap-servers: [fafka地址1,fafka地址2,....]
#    producer序列化設置producer:#key序列化設置,設置成json對象
#      key-serializer: org.springframework.kafka.support.serializer.JsonSerializer
#    val序列化設置,設置成json對象value-serializer: org.springframework.kafka.support.serializer.JsonSerializer

2.博主安裝了kafka ui插件,就直接創建主題了

當前一個集群,因為博主只搭建了一臺服務器,也可以稱為一個節點

創建主題

沒有安裝kafka ui,就再main那里啟動項目時創建

package com.atguigu.boot3_08_kafka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.TopicBuilder;@EnableKafka //掃描kafka注解,開啟基于注解的模式
@SpringBootApplication
public class Boot308KafkaApplication {public static void main(String[] args) {SpringApplication.run(Boot308KafkaApplication.class, args);TopicBuilder.name("my-new-topic")//主題.partitions(3)//分區.replicas(2)//副本.build();}}

副本就是備份,有幾節點就可以創建幾個副本,副本數量一般采取分區數量-1,只有一個節點就N分區1副本


?3.在main 加上這個注解@EnableKafka

package com.atguigu.boot3_08_kafka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;@EnableKafka //掃描kafka注解,開啟基于注解的模式
@SpringBootApplication
public class Boot308KafkaApplication {public static void main(String[] args) {SpringApplication.run(Boot308KafkaApplication.class, args);}}

4.生產者發送消息

package com.atguigu.boot3_08_kafka.controller;import com.atguigu.boot3_08_kafka.entity.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class KafkaController {@Autowiredprivate KafkaTemplate kafkaTemplate;@GetMapping("/jjj") public String hello() {kafkaTemplate.send("tach", 0,"hello","急急急132");//send("主題", 分區號,"key","val")return "ok";}@GetMapping("/odj")public String odj() {kafkaTemplate.send("tach", 0,"hello",new Person(1L,"odj",19));//對象json需要序列化,可用配置文件配置,也可以在對象中序列化對象return "OK";}
}

5.消費者監聽消息

package com.atguigu.boot3_08_kafka.listener;import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.annotation.PartitionOffset;
import org.springframework.kafka.annotation.TopicPartition;
import org.springframework.stereotype.Component;@Component
public class MykafkaListener {/*** 默認的監聽是從最后一個消息開始拿,也就是只會拿新消息,不會拿歷史的* @KafkaListener(topics = "主題",groupId = "用戶組")* ConsumerRecord 消費者從 Kafka 獲取消息的各種元數據和實際的消息* @param record*/@KafkaListener(topics = "tach",groupId = "teach")public void listen(ConsumerRecord<?, ?> record) {Object key = record.key();Object val = record.value();System.out.println("收到值key:"+key+"收到值val:"+val);}/***  想要到歷史的消息或者全部消息,只能設置偏移量*  @KafkaListener(groupId = "用戶組" ,topicPartitions = {設置分區,設置偏移量})*  @TopicPartition(topic = "主題" ,partitionOffsets 設置偏移量)*  @PartitionOffset(partition = "哪個分區", initialOffset = "從第幾個偏移量開始")** @param record*/@KafkaListener(groupId = "teach" ,topicPartitions = {@TopicPartition(topic = "tach" ,partitionOffsets = {@PartitionOffset(partition = "0", initialOffset = "0")})})public void listens(ConsumerRecord<?, ?> record) {Object key = record.key();Object val = record.value();System.out.println("收到值key:"+key+"收到值val:"+val);}
}

最后查看結果


最后補充一個小知識

groupId = "用戶組"

組里的成員是競爭模式

用戶組和用戶組之間是發布/訂閱模式

由zookeeper分配管理

好了可以和面試官吹牛逼了


課外話

如果是傳對象json需要序列化,創建對象時序列化,不推薦太原始重要是很占資源

因為開始我們都配置好了,有對象就會自動序列化

package com.atguigu.boot3_08_kafka.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@AllArgsConstructor
@NoArgsConstructor
@Data
public class Person implements Serializable {//不推薦implements Serializable private Long id;private String name;private Integer age;
}

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

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

相關文章

基于 RWA 模型與 AI - Agent 協同的企業級 aPAAS 架構設計

一、引言 在企業數字化轉型不斷深化的當下&#xff0c;現實世界資產&#xff08;RWA&#xff09;模型與人工智能智能體&#xff08;AI - Agent&#xff09;的協同融合&#xff0c;為企業級應用平臺即服務&#xff08;aPAAS&#xff09;架構的創新發展帶來了新契機。這種架構旨在…

Flutter PopScope對于iOS設置canPop為false無效問題

這個問題應該出現很久了&#xff0c;之前的組件WillPopScope用的好好的&#xff0c;flutter做優化打算“軟性”處理禁用返回手勢&#xff0c;出了PopScope&#xff0c;這個組件也能處理在安卓設備上的左滑返回事件。但是iOS上面左滑返回手勢禁用&#xff0c;一直無效。 當然之…

基爾霍夫定律課后學習日志

基爾霍夫定律課后日志 今天在學習基爾霍夫定律后&#xff0c;我對它在實際工程中的價值有了全新的認識。 基爾霍夫電流定律&#xff08;KCL&#xff09;和電壓定律&#xff08;KVL&#xff09;是電路分析的基石。在電子電路設計領域&#xff0c;這兩個定律發揮著關鍵作用。以…

矩陣交換行(信息學奧賽一本通-1119)

【題目描述】 給定一個55的矩陣(數學上&#xff0c;一個rc的矩陣是一個由r行c列元素排列成的矩形陣列)&#xff0c;將第n行和第m行交換&#xff0c;輸出交換后的結果。 【輸入】 輸入共6行&#xff0c;前5行為矩陣的每一行元素,元素與元素之間以一個空格分開。 第6行包含兩個整…

SWPU 2022 新生賽

webdog1__start if (isset($_GET[web])) {$first$_GET[web];if ($firstmd5($first)) md5 自等 web0e215962017 &#xff08;md5后也是 0e) 登入后得到提示&#xff0c;robots.txt 訪問 f14g.php 返回包里發現 hint > if (isset($_GET[get])){$get$_GET[get];if(!strs…

什么是 Redis

Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的、基于內存的鍵值存儲系統&#xff0c;常用作數據庫、緩存和消息中間件。它支持多種數據結構&#xff0c;如字符串、哈希、列表、集合、有序集合等&#xff0c;并提供豐富的操作命令。 主要特點 高性能&am…

海數通-海員數字化管理平臺(企業數字化)

產品介紹 海數通產品是一套海員數字化管理平臺&#xff0c;為企業提供海員檔案、海歷、動態、證書、培訓、晉升、薪資、社險等全流程多維度的智能化管理能力。薪資計算模型和社險計算模型能夠自動并準確的完成復雜的工資、社險計算工作&#xff0c;極大的提高工作效率和準確性…

如何處理PHP中的日期和時間問題

如何處理PHP中的日期和時間問題 在PHP開發中&#xff0c;日期和時間的處理是一個常見且重要的任務。無論是記錄用戶操作時間、生成時間戳&#xff0c;還是進行日期計算&#xff0c;PHP提供了豐富的函數和類來幫助開發者高效處理這些需求。本文將詳細介紹如何在PHP中處理日期和…

【SpringMVC】入門版

1.基本概念 1.1三層架構 三層架構也就是我們常說的b/s架構中的表現層&#xff0c;業務層和持久層,每層都各司其職&#xff0c;下面來分別講解這三層的作用。 表現層&#xff1a; 也就是我們常說的web層。它負責接收客戶端的請求&#xff0c;向客戶端響應結果&#xff0c;通…

【Java進階學習 第八篇】石頭迷陣游戲

繪制頁面 首先繪制指定寬和高的窗體 JFrame frame new JFrame();frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setSize(514,595);frame.setTitle("石頭迷陣單機版v1.0");//想讓游戲一直在屏幕的最上層frame.setAlwaysOnTop(true);//想讓窗…

wireguard搭配udp2raw部署內網

前言 上一篇寫了使用 wireguard 可以非常輕松的進行組網部署&#xff0c;但是如果服務器廠商屏蔽了 udp 端口&#xff0c;那就沒法了 針對 udp 被服務器廠商屏蔽的情況&#xff0c;需要使用一款 udp2raw 或 socat 類似的工具&#xff0c;來將 udp 打包成 tcp 進行通信 這里以…

Node.js REPL 深入解析

Node.js REPL 深入解析 引言 Node.js 作為一種流行的 JavaScript 運行環境,在服務器端開發中扮演著重要角色。REPL(Read-Eval-Print Loop,讀取-求值-打印循環)是 Node.js 的一個核心特性,它允許開發者在一個交互式環境中執行 JavaScript 代碼。本文將深入探討 Node.js R…

系統可觀測性(5)OpenTelemetry基礎使用

系統可觀測性(5)OpenTelemetry基礎概念 Author: Once Day Date: 2025年3月12日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 本文檔翻譯整理自《OpenTelemetry Docs》&a…

AVL樹的平衡算法的簡化問題

AVL樹是一種緊湊的二叉查找樹。它的每個結點&#xff0c;都有左右子樹高度相等&#xff0c;或者只相差1這樣的特性。文章https://blog.csdn.net/aaasssdddd96/article/details/106291144給出了一個例子。 為了便于討論&#xff0c;這里對AVL樹的結點平衡情況定義2個名稱&#…

Jenkins 集成DingDing 推送

現狀分析 開發頻繁發布代碼&#xff0c;和測試沒有及時溝通&#xff0c;導致測試返工、bug漏測等 解決方案 Jenkins 集成DingDing機器人&#xff0c;在構建時觸發推送 DingDing端機器人配置 1、在釘釘電腦端建立群聊 2、點擊群右上角設置&#xff0c;點擊【智能群助手】 …

【Quarkus】通過Quarkus集成后端服務示例

說明&#xff1a; REST資源接口&#xff08;AuthResource&#xff09;。REST資源實現類&#xff08;AuthResourceImpl&#xff09;。服務接口&#xff08;AuthService&#xff09;。服務實現類&#xff08;AuthServiceImpl&#xff09;。配置文件&#xff08;application.prop…

硬件驅動——51單片機:獨立按鍵、中斷、定時器/計數器

目錄 一、獨立按鍵 1.原理 2.封裝函數 3.按鍵控制點燈 數碼管 二、中斷 1.原理 2.步驟 3.中斷寄存器IE 4.控制寄存器TCON 5.打開外部中斷0和1 三、定時器/計數器 1.原理 2.控制寄存器TCON 3.工作模式寄存器TMOD 4.按鍵控制頻率的動態閃爍 一、獨立按鍵 1…

基于PMU的14節點、30節點電力系統狀態估計MATLAB程序

“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 程序簡介&#xff1a; 程序采用三種方法對14節點和30節點電力系統狀態進行評估&#xff1a; ①PMU同步向量測量單元結合加權最小二乘法&#xff08;WLS&#xff09;分析電力系統的電壓幅值和相角狀態&#xff1b; …

Apifox Helper 自動生成API接口文檔

在我們開發過程中我們在編寫請求地址和編寫請求參數的時候特別花費時間耗費了我們很多時間&#xff0c;作為一個程序員&#xff0c;更應該把精力時間集中在開發上&#xff0c; Apifox Helper 是 Apifox 團隊針對 IntelliJ IDEA 環境所推出的插件&#xff0c;可以在 IDEA 環境中…

Python 3.13實現數據未來預測功能(詳細功能實現及環境搭建)

目錄 摘要 1. 導入所需庫 2. 加載和查看數據 3. 數據預處理 4. 拆分數據集 5. 模型訓練 6. 模型評估 7. 進行預測 結論 摘要 本文將引導您使用Python 3.13實現數據預測功能。我們將使用常用的Python庫, 如pandas、numpy和sklearn&#xff0c;來幫助讀者快速搭建一個簡…