?????????????????????????Apache Kafka
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、革吉網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5開發(fā)、成都商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、外貿(mào)營銷網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為革吉等各大城市提供網(wǎng)站開發(fā)制作服務。2. akfX軸拆分: 水平復制,就是講單體系統(tǒng)多運行幾個實例,做集群加負載均衡的模式,主主、主備、主從。解決單點,高可用問題
Y軸拆分: 基于不同的業(yè)務拆分
Z軸拆分: 基于數(shù)據(jù)拆分。分片分治
3. 概念Apache Kafka是Apache軟件基金會的開源的流處理平臺,該平臺提供了消息的訂閱與發(fā)布的消息隊列,一般用作系統(tǒng)間解耦、異步通信、削峰填谷等作用。同時Kafka又提供了Kafka streaming插件包實現(xiàn)了實時在線流處理。相比較一些專業(yè)的流處理框架不同,Kafka Streaming計算是運行在應用端,具有簡單、入門要求低、部署方便等優(yōu)點。
有的kafka消息可以被多個消費者進行消費,有的只能有一個消費者進行消費
Kafka集群以Topic形式負責分類集群中的Record每一個Record屬于一個Topic。每個Topic底層都會
Kafka集群以Topic形式負責分類集群中的Record,每一個Record屬于一個Topic。每個Topic底層都會對應一組分區(qū)的日志用于持久化Topic中的Record。同時在Kafka集群中,Topic的每一個日志的分區(qū)都一定會有1個Borker擔當該分區(qū)的Leader,其他的Broker擔當該分區(qū)的follower,Leader負責分區(qū)數(shù)據(jù)的讀寫操作,follower負責同步改分區(qū)的數(shù)據(jù)。這樣如果分區(qū)的Leader宕機,該分區(qū)的其他follower會選取出新的leader繼續(xù)負責該分區(qū)數(shù)據(jù)的讀寫。其中集群的中Leader的監(jiān)控和Topic的部分元數(shù)據(jù)是存儲在Zookeeper中.
只能保證分區(qū)內(nèi)部的有序性;同一個topic的不同分區(qū),不能保證數(shù)據(jù)有序
每個消費者可以控制自己的消費偏移量,多個消費者消費消息互不干擾
offset是下一次要讀取的位置
kafka的消息消費是以消費組的形式進行消費
同一消費組中的消費者對消息進行均分消費
消費組個數(shù)一般要小于topic中的分區(qū)數(shù)
kafka高吞吐量,即使是普通的服務器,也可以支持每秒百萬級的寫入,超過了大部分的消息中間件
kafka的消息是以日志的形式存儲在磁盤中,為了優(yōu)化寫入速度,采用了順序寫入和MMFile兩個技術。順序寫可以減少磁盤尋址時間,MMFile(內(nèi)存映射文件)可以減少IO,使寫入性能逼近內(nèi)存
kafka的服務將數(shù)據(jù)往pageCache中寫入,由pageCache寫入磁盤
4. DMA常規(guī)IO操作會讓CPU阻塞,等待從磁盤中讀取數(shù)據(jù);
DMA(直接內(nèi)存訪問)讀取會新增DMA,減少CPU的阻塞
零拷貝
5. 知識點副本因子的個數(shù)不能大于broker的個數(shù)?
kafka中的分區(qū)數(shù)只能增,不能減
kafka的操作,默認是異步的
kafka也需要對key、value進行序列化(redis也需要)
生產(chǎn)者發(fā)送消息時,對消息進行序列化
消費者消費消息時,要對消息進行反序列化
subscribe消費時,通過消費組實現(xiàn)負載均衡;
assign消費時,可以指定分區(qū)、offset進行消費
6. 默認的分區(qū)策略1. 如果指定了分區(qū),使用指定的
2. 如果沒有指定分區(qū),key存在,那么分區(qū)基于key的hash值
3. 如果沒有指定分區(qū),也沒有key,那么輪訊
也可以自定義分區(qū)策略,實現(xiàn)Partitioner接口
默認沒有攔截器,可以自定義攔截器
攔截器可以對發(fā)送過來的消息進行修改
當消費者首次消費時(kafka中沒有記載offset),默認消費最新的消息,也可以進行設置
可以設置offset自動提交的時間間隔
7.?ackack可以保證消息可靠性
8.?重復消費生產(chǎn)者正常發(fā)生消息,消費者正常消費消息,但是消費完消息給生產(chǎn)者發(fā)送應答失敗。生產(chǎn)者會認為消息沒有消費成功,會重試,此時會造成消息重復消費
重試次數(shù),不包含第一次發(fā)送
怎么避免消息重復消費:
服務端對消息進行校驗,看看是否是重復的請求
添加唯一標識,并記錄該標識是否消費完成
冪等:
kafka中冪等默認是關閉的,在使用冪等的時候,必須開啟retries=true和acks=all
kafka的冪等只能保證一條記錄在分區(qū)內(nèi)發(fā)送的原子性;要保證多分區(qū)的多條記錄之間的完整性,需要事務
9. 事務kafka的事務分為生產(chǎn)者事務、消費者&生產(chǎn)者事務
kafka開啟事務后,需要將隔離級別改成read_committed(默認是read_uncommitted)
消費者端開啟事務后,需要關閉自動提交offset
事務流程
10. 數(shù)據(jù)同步機制(leader到follower)?partition底層是按照segment(段)對文件進行存儲
HW(high watermarker):高水位線,HW之前的數(shù)據(jù)都已經(jīng)完成備份。當所有節(jié)點都備份成功,leader才會更新HW
LEO(log end offset):標識的是分區(qū)中最后一條消息的下一個位置,每個分區(qū)副本有自己的LEO
ISR:是leader維護的一份處于同步的副本集合,要是followerf同步很慢,會被踢出isr
OSR:于leader副本同步滯后過多的副本(不包括leader副本)將組成?OSR
AR:分區(qū)中的所有副本統(tǒng)稱為?AR。AR=ISR+OSR
kafka0.11版本之前,通過高水位(HW)來保持數(shù)據(jù)同步
缺點:
1. 數(shù)據(jù)丟失
2. leader和follower數(shù)據(jù)不一致
kafka0.11之后,引入了Leader Epoch來解決數(shù)據(jù)同步問題,代替HW作為消息的截斷點
11. 監(jiān)控kafka eagle可以對kafka進行監(jiān)控
12. 整合SpringBootSpringboot中使用@KafkaListeners進行監(jiān)聽,接收消息
使用@SendTo發(fā)送消息
也可以使用KafkaTemplate進行操作
kafka的事務也支持@Transactional注解
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧