大數據入門第十七天——storm上游數據源 之kafka詳解(一)入門與集羣安裝

1、概述

  1.kafka是什麼html

    根據標題能夠有個概念:kafka是storm的上游數據源之一,也是一對經典的組合,就像郭德綱和于謙java

    根據官網:http://kafka.apache.org/intro 的解釋呢,是這樣的:redis

 

   Apache Kafka® is a distributed streaming platformapache

    ApacheKafka®是一個分佈式流媒體平臺vim

  l Apache Kafka是一個開源消息系統,由Scala寫成。是由Apache軟件基金會開發的一個開源消息系統項目。windows

  l Kafka最初是由LinkedIn開發,並於2011年初開源。2012年10月從Apache Incubator畢業。該項目的目標是爲處理實時數據提供一個統1、高通量、低等待的平臺。緩存

  l Kafka是一個分佈式消息隊列:生產者、消費者的功能。它提供了相似於JMS的特性,可是在設計實現上徹底不一樣,此外它並非JMS規範的實現bash

  l Kafka對消息保存時根據Topic進行歸類,發送消息者稱爲Producer,消息接受者稱爲Consumer,此外kafka集羣有多個kafka實例組成,每一個實例(server)成爲broker。app

  l 不管是kafka集羣,仍是producer和consumer都依賴於zookeeper集羣保存一些meta信息,來保證系統可用負載均衡

 2.主要feature

   1:It lets you publish and subscribe to streams of records.發佈和訂閱消息流,這個功能相似於消息隊列,這也是kafka歸類爲消息隊列框架的緣由

  2:It lets you store streams of records in a fault-tolerant way.以容錯的方式記錄消息流,kafka以文件的方式來存儲消息流

  3:It lets you process streams of records as they occur.能夠再消息發佈的時候進行處理

  3.使用場景

    在流式計算中,Kafka通常用來緩存數據,Storm經過消費Kafka的數據進行計算。

    經典組合是:kafka+storm+redis

   4.消息隊列補充

    JMS參考基礎篇ActiveMQ相關介紹:http://www.cnblogs.com/jiangbei/p/8311148.html

    爲何須要消息隊列:     

      消息系統的核心做用就是三點:解耦,異步和並行

    kafka是類JMS,它吸取了JMS兩種模式,將發佈/訂閱模式中消費者或者數據的方式從被動推送變成主動拉取

2、相關概念與組件

  • Topics:一類消息,例如page view日誌、click日誌等均可以以topic的形式存在,Kafka集羣可以同時負責多個topic的分發。
  • Producers:We'll call processes that publish messages to a Kafka topic producers。
  • Consumers:We'll call processes that subscribe to topics and process the feed of published messages consumers。消費組是邏輯上的一個訂閱者
  • Broker:消息中間件處理結點,一個Kafka節點就是一個broker,多個broker能夠組成一個Kafka集羣。
  • Partition:topic物理上的分組,一個topic能夠分爲多個partition,每一個partition是一個有序的隊列。(相應的同個topic的不一樣分區,有消費者組的概念)
  • Segment:partition物理上由多個segment組成。

  更多詳細介紹,參考http://kafka.apache.org/intro

            http://blog.csdn.net/a568078283/article/details/51464524

  消息發送流程:

  

 

  請帶着如下問題思考:

分組策略
如何保證數據的徹底生產

partition數量和broker的關係
每一個partition數據如何保存到硬盤上
kafka有什麼獨特的特色(爲何它是大數據下消息隊列的寵兒)

消費者如何標記消費狀態
消費者負載均衡的策略
如何保證消費者消費數據是有序的
View Code

 3、kafka集羣安裝

  1.下載

     這裏換成一下wget,下載速度仍是很是快的!

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

  // 這裏也可使用windows下載完成後經過ftp進行上傳(help命令進行提示),rz/sz請勿使用!屬於遠古時代的協議!大文件速度堪憂!

  前導條件是java環境和zk,固然,新版的kafka已經內置了zk(屬於可選配置了)

  2.解壓

tar -zxvf kafka_2.11-0.11.0.2.tgz -C apps/

  這裏就不採用mv進行解壓後目錄的重命名了,採用一下建立軟鏈接的方式!

ln -s kafka_2.11-0.11.0.2/ kafka

  3.修改配置文件

    一樣的,養成一個備份出廠設置的習慣:

[hadoop@mini1 config]$ cp server.properties server.properties.bak

    此配置文件的各項說明參考http://blog.csdn.net/lizhitao/article/details/25667831

[hadoop@mini1 config]$ vim server.properties

    主要修改的配置以下:

      最重要的參數爲:broker.id、log.dir、zookeeper.connect

broker.id=0 listeners=PLAINTEXT://192.168.137.128:9092
port=9092 log.dirs=home/hadoop/apps/kafka/logs
number.partition=2 zookeeper.connect
=mini1:2181,mini2:2181,mini3:2181

  // 注意listener處必須是IP!緣由參考:http://blog.csdn.net/louisliaoxh/article/details/51567515

  4.分發安裝包

[hadoop@mini1 apps]$ scp -r kafka_2.11-0.11.0.2/ mini2:/home/hadoop/apps/
[hadoop@mini1 apps]$ scp -r kafka_2.11-0.11.0.2/ mini3:/home/hadoop/apps/

  5.修改分發的節點配置

    先依次給mini2,mini3建立軟鏈接:

ln -s kafka_2.11-0.11.0.2/ kafka

    再修改配置:

      修改broker.id分別是1和2(不得重複);修改監聽處的IP

  6.啓動kafka

    先啓動zk(使用了本身的zk)

    這裏能夠配置一下環境變量,能夠方便後續的一些操做,而且這裏配置了軟鏈接的話是很是方便的(後續即便安裝新版本,環境變量也無需變動)

    模仿zk寫一個一鍵啓動腳本

 

#!/bin/bash

BROKERS="mini1 mini2 mini3"
KAFKA_HOME="/home/hadoop/apps/kafka"

for BROKER in $BROKERS
do
    echo "Starting kafka on ${BROKER} ... "
    ssh ${BROKER} "source /etc/profile; nohup sh ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties > /dev/null 2>&1 &"
    if [[ $? -ne 0 ]]; then
        echo "Start kafka on ${BROKER} is OK !"
    fi
done

 

 

 

    kafka啓動命令以下:(這裏使用後臺啓動)

 bin/kafka-server-start.sh config/server.properties &

 4、相關配置

  參考博文http://www.javashuo.com/article/p-fqsjtlrp-ez.html

  官網配置講解http://kafka.apache.org/0110/documentation.html#configuration

相關文章
相關標籤/搜索