文章目錄
- 一、kafka基礎內容
- 二、kafka 中重要的引數配置
- 2.1、log.dirs
- 2.2、unclean.leader.election.enable
- 2.3、message.max.bytes
- 2.4、request.required.acks = 0、1和-1(all)
- acks=0
- acks=1(默認)
- acks=-1/all
- 2.5、min.insync.replicas
一、kafka基礎內容
先了解下基礎的概念
主題(Topic)
主題是承載訊息的容器,我們發布與訂閱的物件就是主題,在實際的應用中通常會按照業務去劃分不同的主題,
磁區(Partition)
每個主題可以有多個磁區,磁區數量可以在創建主題時定義,
訊息位移(Offset)表示每個磁區中每條訊息的位置資訊,是一個單調遞增且不變的值,
副本(Replica)
顧名思義是同一條訊息的備份資料存放的地方,kafka的副本分為領導者副本和追隨者副本,副本是在磁區層級下的,即每個磁區可配置多個副本實作高可用,
生產者(Producer)
向主題發布新訊息的應用,
消費者(Consumer)
從主題訂閱新訊息的應用,
集群節點(Broker)
一個kafka集群由一個或者多個broker組成,集群的基本組成單位
消費者組(Consumer Group)
多個消費者實體共同組成的一個組,每個組中的實體只能消費一次訊息,
重平衡(Rebalance)
消費者組內某個消費者實體掛掉后,其他消費者實體自動重新分配訂閱主題磁區的程序,Rebalance 是 Kafka 消費者端實作高可用的重要手段,
說完了基礎的概念,那么kafka是怎么通過以上的模塊進行運作的呢?
首先,kafka的發布與訂閱都是針對于topic來說的,不同的應用程式,producer創建的資料與cunsumer的消費資料都是通過topic來進行生產與消費,
kafka會將topic分成多個partition,存放于不同的broker的目錄中,這其中的目的有很多,比如說為了水平擴展提升性能,為了資料的不丟失等,producer產生的每個訊息都會通過不同的負載均衡策略發送到不同的partition中去,
對于partition來說,他是需要設定不同的副本的,每個partition必須要有一個領導者副本和多個追隨者副本,領導者副本是對外提供資料,追隨者副本僅僅用于做資料備份,而Offset則是表明當前副本已經消費到的位置,
最后,如果消費者組有實體掛掉了,那么kafka會自動觸發重平衡,
二、kafka 中重要的引數配置
2.1、log.dirs
Broker 中存放資料的目錄集合,
通過這個引數可以配置多個資料存放目錄,為什么要配置多個目錄,目的是為了實作故障轉移,
2.2、unclean.leader.election.enable
是否允許 Unclean Leader 選舉,
正常的生產配置中,這個引數是配置成fasle的,上文有說道partition中有分領導者副本和追隨者副本,這個引數就是為了在領導者副本掛了的時候起作用的,所謂的Unclean副本,指的就是落后于領導者副本進度過多的副本,沒有處于In-sync Replicas副本集合中(這塊內容后續分析),如果配置成ture,一旦unclean副本競選領導者副本成功了,那么kafka有可能會丟失資料,
2.3、message.max.bytes
Broker 能夠接收的最大訊息大小
這個沒啥好說的,訊息佇列不適合傳輸bigdata,
2.4、request.required.acks = 0、1和-1(all)
acks=0
Producer把訊息發送出去,不需要等待任何確認收到的訊息,生產者覺得自己發送成功了,但是實際上訊息有可能因為kafka掛了而丟失了,保證了高性能,但是資料的可靠性得不到保障,
acks=1(默認)
Producer把訊息發送出去,至少要等待領導者副本已經成功將資料寫入本地log,但是并沒有等待所有追隨者副本是否成功寫入,該情況下,如果follower沒有成功備份資料,而此時leader剛好又掛掉了,就會導致訊息丟失,
acks=-1/all
Producer把訊息發送出去,這要求isr副本集合中所有的副本都與領導者副本同步了訊息,才能認為這條訊息是寫入成功的,犧牲了性能但是保證了資料的可靠性,
2.5、min.insync.replicas
isr最小副本數,默認值是1,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301903.html
標籤:其他
上一篇:第4章Hadoop的分布式協調服務-ZooKeeper
下一篇:ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apa
