這篇文章主要介紹了SpringBoot2中如何整合Kafka組件的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringBoot2中如何整合Kafka組件文章都會有所收獲,下面我們一起來看看吧。
成都創(chuàng)新互聯(lián)公司專注于石景山企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。石景山網(wǎng)站建設(shè)公司,為石景山等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)-- 下載 wget http://mirror.bit.edu.cn/apache/kafka/2.2.0/kafka_2.11-2.2.0.tgz -- 解壓 tar -zxvf kafka_2.11-2.2.0.tgz -- 重命名 mv kafka_2.11-2.2.0 kafka2.11
kafka依賴ZooKeeper服務(wù),需要本地安裝并啟動ZooKeeper。
參考文章: Linux系統(tǒng)搭建ZooKeeper3.4中間件,常用命令總結(jié)
-- 執(zhí)行位置 -- /usr/local/mysoft/kafka2.11 bin/kafka-server-start.sh config/server.properties
ps -aux |grep kafka
-- 基礎(chǔ)路徑 -- /usr/local/mysoft/kafka2.11/config vim server.properties -- 添加下面注釋 advertised.listeners=PLAINTEXT://192.168.72.130:9092
Kafka是由Apache開源,具有分布式、分區(qū)的、多副本的、多訂閱者,基于Zookeeper協(xié)調(diào)的分布式處理平臺,由Scala和Java語言編寫。通常用來搜集用戶在應(yīng)用服務(wù)中產(chǎn)生的動作日志數(shù)據(jù),并高速的處理。日志類的數(shù)據(jù)需要高吞吐量的性能要求,對于像Hadoop一樣的日志數(shù)據(jù)和離線分析系統(tǒng),但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的并行加載機制來統(tǒng)一線上和離線的消息處理,也是為了通過集群來提供實時的消息。
(1)、通過磁盤數(shù)據(jù)結(jié)構(gòu)提供消息的持久化,消息存儲也能夠保持長時間穩(wěn)定性;
(2)、高吞吐量,即使是非常普通的硬件Kafka也可以支持每秒超高的并發(fā)量;
(3)、支持通過Kafka服務(wù)器和消費機集群來分區(qū)消息;
(4)、支持Hadoop并行數(shù)據(jù)加載;
(5)、API包封裝的非常好,簡單易用,上手快 ;
(6)、分布式消息隊列。Kafka對消息保存時根據(jù)Topic進行歸類,發(fā)送消息者稱為Producer,消息接受者稱為Consumer;
點對點模式
點對點模型通常是一個基于拉取或者輪詢的消息傳遞模型,消費者主動拉取數(shù)據(jù),消息收到后從隊列移除消息,這種模型不是將消息推送到客戶端,而是從隊列中請求消息。特點是發(fā)送到隊列的消息被一個且只有一個消費者接收處理,即使有多個消費者監(jiān)聽隊列也是如此。
發(fā)布訂閱模式
發(fā)布訂閱模型則是一個基于推送的消息傳送模型,消息產(chǎn)生后,推送給所有訂閱者。發(fā)布訂閱模型可以有多種不同的訂閱者,臨時訂閱者只在主動監(jiān)聽主題時才接收消息,而持久訂閱者則監(jiān)聽主題的所有消息,即使當(dāng)前訂閱者不可用,處于離線狀態(tài)。
程序解耦,生產(chǎn)者和消費者獨立,各自異步執(zhí)行;
消息數(shù)據(jù)進行持久化存儲,直到被全部消費,規(guī)避了數(shù)據(jù)丟失風(fēng)險;
流量削峰,使用消息隊列承接訪問壓力,盡量避免程序雪崩 ;
降低進程間的耦合度,系統(tǒng)部分組件崩潰時,不會影響到整個系統(tǒng);
保證消息順序執(zhí)行,解決特定場景業(yè)務(wù)需求 ;
Broker
一臺kafka服務(wù)器就是一個broker。一個集群由多個broker組成。一個broker可以容納多個topic。
Producer
消息生產(chǎn)者,就是向kafka broker發(fā)消息的客戶端。
Consumer
消息消費者,向kafka broker取消息的客戶端。
Topic
每條發(fā)布到Kafka集群的消息都有一個類別,這個類別被稱為Topic,可以理解為一個隊列。
Consumer Group
每個Consumer屬于一個特定的Consumer Group,可為每個Consumer指定group name,若不指定group name則屬于默認(rèn)的分組。
Partition
一個龐大大的topic可以分布到多個broker上,一個topic可以分為多個partition,每個partition是一個有序的隊列。partition中的每條消息都會被分配一個有序的id。kafka只保證按一個partition中的順序?qū)⑾l(fā)給consumer,不保證一個topic的整體的順序。Partition是物理上的概念,方便在集群中擴展,提高并發(fā)。
消息生產(chǎn)者 : kafka-producer-server
消息消費方 : kafka-consumer-server
<!-- SpringBoot依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- kafka 依賴 --> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.2.4.RELEASE</version> </dependency>
spring: kafka: bootstrap-servers: 127.0.0.1:9092
@RestController public class ProducerWeb { @Resource private KafkaTemplate<String, String> kafkaTemplate; @RequestMapping("/send") public String sendMsg () { MsgLog msgLog = new MsgLog(1,"消息生成", 1,"消息日志",new Date()) ; String msg = JSON.toJSONString(msgLog) ; // 這里Topic如果不存在,會自動創(chuàng)建 kafkaTemplate.send("cicada-topic", msg); return msg ; } }
spring: kafka: bootstrap-servers: 127.0.0.1:9092 consumer: group-id: test-consumer-group
@Component public class ConsumerMsg { private static Logger LOGGER = LoggerFactory.getLogger(ConsumerMsg.class); @KafkaListener(topics = "cicada-topic") public void listenMsg (ConsumerRecord<?,String> record) { String value = record.value(); LOGGER.info("ConsumerMsg====>>"+value); } }
寫入方式
生產(chǎn)者基于推push推模式將消息發(fā)布到broker,每條消息都被追加到分區(qū)patition中,屬于磁盤順序?qū)懀时入S機寫內(nèi)存要高,保障kafka高吞吐量。
分區(qū)概念
消息發(fā)送時都被發(fā)送到一個topic,而topic是由Partition Logs(分區(qū)日志)組成,其組織結(jié)構(gòu)如下圖所示:
每個Partition中的消息都是有序的,生產(chǎn)的消息被不斷追加到Partitionlog上,其中的每一個消息都被賦予了一個的offset值。每個Partition可以通過調(diào)整以適配它所在的機器,而一個topic又可以有多個Partition組成,因此整個集群就可以適應(yīng)任意大小的數(shù)據(jù)。分區(qū)的原則:指定patition,則直接使用;未指定patition但指定key,通過對key的value進行hash出一個patition;patition和key都未指定,使用輪詢選出一個patition。
消費圖解
消費者是以consumer group消費者組的方式工作,由一個或者多個消費者組成一個組,共同消費一個topic。每個分區(qū)在同一時間只能由group中的一個消費者讀取,但是多個group可以同時消費一個partition。
消費方式
消費者采用pull拉模式從broker中讀取數(shù)據(jù)。對于Kafka而言,pull模式更合適,它可簡化broker的設(shè)計,consumer可自主控制消費消息的速率,同時consumer可以自己控制消費方式——即可批量消費也可逐條消費,同時還能選擇不同的提交方式從而實現(xiàn)不同的數(shù)據(jù)傳輸場景。
關(guān)于“SpringBoot2中如何整合Kafka組件”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“SpringBoot2中如何整合Kafka組件”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享文章:SpringBoot2中如何整合Kafka組件-創(chuàng)新互聯(lián)
標(biāo)題來源:http://muchs.cn/article24/dhihje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、微信公眾號、定制網(wǎng)站、網(wǎng)站收錄、ChatGPT、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容