消息中間件之Kafka

公司需求變動,對消息中間件的選型從RabbitMQ轉爲Kafka,我也這段時間好好了看了下Kakfa。將最近的學習筆記整理整理,共享一哈。

1、什麼是kafka

Apache kafka是消息中間件的一種。

舉個例子,生產者消費者,生產者生產雞蛋,消費者消費雞蛋,生產者生產一個雞蛋,消費者就消費一個雞蛋,假設消費者消費雞蛋的時候噎住了(系統宕機了),生產者還在生產雞蛋,那新生產的雞蛋就丟失了。再比如生產者很強勁(大交易量的情況),生產者1秒鐘生產100個雞蛋,消費者1秒鐘只能喫50個雞蛋,那要不了一會,消費者就喫不消了(消息堵塞,最終導致系統超時),消費者拒絕再吃了,”雞蛋“又丟失了,這個時候我們放個籃子在它們中間,生產出來的雞蛋都放到籃子裏,消費者去籃子裏拿雞蛋,這樣雞蛋就不會丟失了,都在籃子裏,而這個籃子就是”kafka“。

雞蛋其實就是“數據流”,系統之間的交互都是通過“數據流”來傳輸的(就是tcp、https什麼的),也稱爲報文,也叫“消息”。

消息隊列滿了,其實就是籃子滿了,”雞蛋“ 放不下了,那趕緊多放幾個籃子,其實就是kafka的擴容。
kafka就是那個"籃子"。
以上是源自

kafka名詞解釋

producer:生產者,就是它來生產“雞蛋”的。

consumer:消費者,生出的“雞蛋”它來消費。

topic:你把它理解爲標籤,生產者每生產出來一個雞蛋就貼上一個標籤(topic),消費者可不是誰生產的“雞蛋”都喫的,這樣不同的生產者生產出來的“雞蛋”,消費者就可以選擇性的“喫”了。

broker:這個是服務器,也就是籃子了。

2、什麼是kakfa的優勢?它主要應用於2大類應用:

  1. 構建實時的流數據管道,可靠地獲取系統和應用程序之間的數據。
  2. 構建實時流的應用程序,對數據流進行轉換或反應。

3、kafka如何讓客戶端使用

kafka的安裝實在是沒什麼技術含量,解壓,寫配置文件路徑,修改server.properties。大家可以去看網上其他的博客,裏面有詳細的安裝教程。我這裏將配置文件中的屬性代表了什麼意思來分享一下:
基礎配置:

host.name=localhost
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://外網ip:9092

個性化配置就需要我們打開server.properties

#是否允許刪除topic,默認false不能手動刪除
delete.topic.enable=true
#當前機器在集羣中的唯一標識,和zookeeper的myid性質一樣
broker.id=0
#當前kafka服務偵聽的地址和端口,端口默認是9092
listeners = PLAINTEXT://192.168.100.21:9092
#這個是borker進行網絡處理的線程數
num.network.threads=3
#這個是borker進行I/O處理的線程數
num.io.threads=8
#發送緩衝區buffer大小,數據不是一下子就發送的,先會存儲到緩衝區到達一定的大小後在發送,能提高性能
socket.send.buffer.bytes=102400
#kafka接收緩衝區大小,當數據到達一定大小後在序列化到磁盤
socket.receive.buffer.bytes=102400
#這個參數是向kafka請求消息或者向kafka發送消息的請請求的最大數,這個值不能超過java的堆棧大小
socket.request.max.bytes=104857600
#消息日誌存放的路徑
log.dirs=/opt/module/kafka_2.11-1.1.0/logs
#默認的分區數,一個topic默認1個分區數
num.partitions=1
#每個數據目錄用來日誌恢復的線程數目
num.recovery.threads.per.data.dir=1
#默認消息的最大持久化時間,168小時,7天
log.retention.hours=168
#這個參數是:因爲kafka的消息是以追加的形式落地到文件,當超過這個值的時候,kafka會新起一個文件
log.segment.bytes=1073741824
#每隔300000毫秒去檢查上面配置的log失效時間
log.retention.check.interval.ms=300000
#是否啓用log壓縮,一般不用啓用,啓用的話可以提高性能
log.cleaner.enable=false
#設置zookeeper的連接端口
zookeeper.connect=node21:2181,node22:2181,node23:2181
#設置zookeeper的連接超時時間
zookeeper.connection.timeout.ms=6000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章