kafka
Kafka是一個分散式訊息佇列,具有高效能、高吞吐量、系統快速, 可擴充套件並且可持久化.
1 基本架構
(1) Topic/主題:訊息根據Topic進行歸類
(2) Producer/生產者:傳送訊息者,向kafka broker發訊息的客戶端
(3) Consumer/消費者:訊息接受者,向kafka broker取訊息的客戶端
(4) broker:一臺kafka伺服器就是一個broker,一個叢集由多個broker組成,一個broker可以容納多個topic
(5) Zookeeper:儲存一些meta資訊,來保證系統可用性
(6) Consumer Group/消費組:kafka用來實現一個topic訊息的廣播(發給所有的consumer)和單播(發給任意一個consumer)的手段。一個topic可以有多個CG。topic的訊息會複製(不是真的複製,是概念上的)到所有的CG,但每個partion只會把訊息發給該CG中的一個consumer。如果需要實現廣播,只要每個consumer有一個獨立的CG就可以了。要實現單播只要所有的consumer在同一個CG。用CG還可以將consumer進行自由的分組而不需要多次傳送訊息到不同的topic
(7) Partition:為了實現擴充套件性,一個非常大的topic可以分佈到多個broker上,一個topic可以分為多個partition,每個partition是一個有序的佇列。partition中的每條訊息都會被分配一個有序的id(offset)。kafka只保證按一個partition中的順序將訊息發給consumer,不保證一個topic的整體(多個partition間)的順序
(8) Offset:kafka的儲存檔案都是按照offset.kafka來命名,用offset做名字的好處是方便查詢。例如你想找位於2049的位置,只要找到2048.kafka的檔案即可。
(9) Replication:Kafka支援以Partition為單位對Message進行冗餘備份,每個 Partition都可以配置至少1個Replication(當僅1個Replication時即僅該Partition本身)
(10) Leader:每個Replication集合中的Partition都會選出一個唯一的Leader,所有的讀寫請求都由Leader處理。其他Replicas從Leader處把資料更新同步到本地,過程類似大家熟悉的MySQL中的Binlog同步。每個Cluster當中會選舉出一個Broker來擔任Controller,負責處理Partition的Leader選舉,協調Partition遷移等工作.
2 基本原理
2.1 分片與副本機制
(1) 分片:當資料量非常大的時候,一個伺服器存放不了,就將資料分成兩個或者多個部分,存放在多臺伺服器上。每個伺服器上的資料,叫做一個分片。
(2) 副本:當資料只儲存一份的時候,有丟失的風險。為了更好的容錯和容災,將資料拷貝幾份,儲存到不同的機器上。
2.2 訊息儲存及查詢機制
Kafka的資料按照topic來儲存,每個topic又包含多個partition.然後對每個partition的資料進行切分儲存,包含有兩個核心的檔案,log用來儲存資料,index用來記錄資料的偏移量.當log檔案等於1G時,新的會寫入到下一個segment中.根據index來讀取資料.
2.3 訊息不丟失機制
(1) 生產者端訊息不丟失
訊息確認分為三個狀態:0()生產者只負責傳送資料),1(某個partition的leader收到資料給出響應),-1(某個partition的所有副本都收到資料後給出響應).訊息生產分為同步模式和非同步模式.
①同步模式:生產者等待數秒,如果broker沒有給出ack響應,就認為失敗;生產者重試幾次,如果還沒有響應,就報錯。
②非同步模式下:先將資料儲存在生產者端的buffer中,滿足資料閾值或者數量閾值其中的一個條件就可以傳送資料。
(2) Borker端訊息不丟失:通過副本機制來保證.
(3) 消費者端訊息不丟失:通過offset來保證.
2.4 分發策略
生產者資料分發策略:預設使用輪詢的方式傳送資料.
消費者的負載均衡機制:一個partition只能被一個組中的成員消費。
所以如果消費組中有多於partition數量的消費者,那麼一定會有消費者無法消費資料。
3 命令
su kafka
--建立
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 3 --topic test
--修改分割槽數
bin/kafka-topics.sh --alter --zookeeper localhost:2181/kakfa --topic im_server_stage_crowd --partitions 3
--檢視所有topic
bin/kafka-topics.sh --list --zookeeper localhost:2181
--檢視分割槽和副本
bin/kafka-topics.sh --describe --zookeeper localhost:2181
--生產
bin/kafka-console-producer.sh --broker-list listeners地址 --topic test1
備註:listeners地址:config/server.properties的listeners屬性
--消費topic
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topic名稱
--刪除topic
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic topic名稱
相關文章
- kafka-ngx_kafka_moduleKafka
- 【Kafka】Kafka叢集搭建Kafka
- Kafka實戰-Kafka ClusterKafka
- kafka之一:kafka簡介Kafka
- kafka工具kafka-topic.shKafka
- Kafka實戰-Flume到KafkaKafka
- Kafka實戰-Kafka到StormKafkaORM
- 一、kafka 介紹 && kafka-clientKafkaclient
- 《Kafka筆記》1、Kafka初識Kafka筆記
- Apache Kafka教程--Kafka新手入門ApacheKafka
- Kafka 訊息監控 - Kafka EagleKafka
- Kafka教程(一)Kafka入門教程Kafka
- kafka詳解一、Kafka簡介Kafka
- Kafka學習之(七)搭建kafka視覺化服務Kafka EagleKafka視覺化
- Kafka學習(四)-------- Kafka核心之ProducerKafka
- Kafka 學習筆記(二) :初探 KafkaKafka筆記
- kafka學習(二)-------- 什麼是KafkaKafka
- Kafka監控系統Kafka Eagle剖析Kafka
- 《Kafka筆記》3、Kafka高階APIKafka筆記API
- Kafka學習之(四)PHP操作KafkaKafkaPHP
- Kafka學習筆記(二) :初探KafkaKafka筆記
- docker kafkaDockerKafka
- Kafka 概述Kafka
- Kafka面試題——20道Kafka知識點Kafka面試題
- Kafka學習(三)-------- Kafka核心之CosumerKafka
- Clickhouse Engine kafka 將kafka資料同步clickhouseKafka
- kafka的Docker映象使用說明(wurstmeister/kafka)KafkaDocker
- Kafka 效能篇:為何 Kafka 這麼快?Kafka
- Kafka學習之(六)搭建kafka叢集Kafka
- Kafka 簡單實驗一(安裝Kafka)Kafka
- Kafka剖析:Kafka背景及架構介紹Kafka架構
- Kafka詳解二、如何配置Kafka叢集Kafka
- kafka詳解三:開發Kafka應用Kafka
- Flume 整合 Kafka_flume 到kafka 配置【轉】Kafka
- 【Kafka】《Kafka權威指南》——提交和偏移量Kafka
- 詳細解析kafka之kafka分割槽和副本Kafka
- 【轉】kafka-告訴你什麼是kafkaKafka
- 【kafka學習筆記】kafka的基本概念Kafka筆記