分佈式消息中間件之kafka設計思想及基本介紹(一)

Kafka初探

場景->需求->解決方案->應用->原理html

我該如何去設計消息中間件--借鑑/完善

場景

跨進程通訊(進程間生產消費模型)java

需求

基本需求
  • 實現消息的發送和接收。web

    NIO通訊 (序列化/反序列化)--dubbo、avro、protobuf、zk(jute)數據庫

  • 實現消息的存儲(持久化/非持久化)apache

    數據庫存儲、文件存儲(磁盤:順序讀寫、頁緩存、持久化的時機(落盤策略)、零拷貝)、內存bootstrap

  • 是否支持跨語言(多語言生態)api

  • 消息的確認(確認機制)--在跨進程通訊中 ->業務邏輯需求緩存

  • 是否支持集羣markdown

    本身實現選舉、第三方的實現(zk)架構

高級需求
  • 是否支持有序(業務邏輯)

  • 是否支持事務消息(業務邏輯)->最終一致性

  • 是否支持高併發和大數據的存儲

  • 是否支持可靠性存儲

  • 是否支持多協議

  • 是否收費

發展

pub/sub--金融領域--TIB(規則)

非個性化需求, 而是共性化需求

IBM websphere mq(商業)

JMS協議->Java api->AMQP(通用性)

kafka
  1. 起源:LinkedIn 活動流 運營數據 誕生之初就是爲了解決大數據量的問題

  2. 簡介

    實現語言:scala

  3. 架構圖 

  4. 下載及安裝

    單節點安裝:

    sudo wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.0/kafka_2.11-2.3.0.tgz

    注意點:

    • 必須安裝zk(啓動時必須先啓動zk),詳情請參考

      http://www.javashuo.com/article/p-ovmalabv-ee.html

    • 遠程安裝 必須修改一下兩個屬性

      #本機ip
      listeners=PLAINTEXT://‘本機ip’:9092
      #zk地址
      zookeeper.connect=localhost:2181
    • 啓動命令

    sh kafka-server-start.sh -daemon server.properties

    集羣安裝:

    • 多機器部署

      • 下載安裝同單機,主要修改配置文件server.properties文件配置

      #zookeeper地址(三個節點相同)
      zookeeper.connect=192.168.1.11:2181
      #broker.id(三個節點分別爲0、一、2)
      broker.id=1
      ##監聽協議(三個節點配置各自的ip地址)
      listeners=PLAINTEXT://192.168.1.12:9092

    • 僞集羣部署

      在單節點建立文件目錄進行設置。參考上述多機器部署。

  5. 基本操做

     

    ##建立topic--建立成功後能夠在zk客戶端看到此消息
    sh kafka-topics.sh --create --zookeeper 192.168.1.11:2181 -replication-factor 1 --partitions 1 --topic test
    ##消費監聽消息
    sh kafka-console-consumer.sh --bootstrap-server 192.168.1.11:9092 --topic test --from-beginning
    ##生產消息
    sh kafka-console-producer.sh --broker-list 192.168.1.11:9092 --topic test

     

消息中間件的應用場景

不一樣的業務領域,異步,解耦,削峯

  1. 註冊新用戶(用戶中心)

    ->發送理財金/優惠券;爲了增長復購->贈送一些優惠券(營銷服務)

  2. 秒殺場景(流量大,商品少)

相關文章
相關標籤/搜索