kafka安裝

jdk安裝

  1. 查看centos自帶的openjdk安裝包:
    rpm -qa | grep openjdk
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
  1. 卸載centos7的openjdk:
    yum -y remove java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64

  2. 下載jdk1.8
    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  3. 解壓jdk安裝包

    tar -xvf jdk-8u201-linux-x64.tar.gz 
    vi /etc/profile
    

    JAVA_HOME=/home/xxx/software/jdk1.8.0_201
    JRE_HOME=/home/xxx/software/jdk1.8.0_201/jre
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    export JAVA_HOME JRE_HOME PATH CLASSPATH

  1. 是profile文件生效
    sourece /etc/profile

  2. 測(cè)試Java是否安裝成功
    java -version

配置免密登錄

  1. 進(jìn)入到.ssh文件夾中,如果沒(méi)有就自己創(chuàng)建該文件夾,生成公鑰私鑰
    ssh-keygen -t rsa 對(duì)于提示 一路回車(chē)

  2. 將生成的公鑰 id_rsa.pub 追加到 authorized_keys文件中,
    cat id_rsa.pub >> authorized_keys
    這里需要注意修改authorized_keys文件的權(quán)限:
    chmod 600 authorized_keys

  3. 配置完成后本地測(cè)試一下,如果沒(méi)有提示輸入密碼則配置成功
    ssh localhost

  4. 對(duì)于分布式環(huán)境,只需要把對(duì)應(yīng)的公鑰放到目標(biāo)機(jī)器的authorized_keys里面即可免密登錄

我們要注意,.ssh目錄的權(quán)限為700,其下文件authorized_keys和私鑰的權(quán)限為600。否則會(huì)因?yàn)闄?quán)限問(wèn)題導(dǎo)致無(wú)法免密碼登錄。我們可以看到登陸后會(huì)有known_hosts文件生成。

Zookeeper安裝

  1. 下載zookeeper: https://mirrors.cnnic.cn/apache/zookeeper/

  2. 解壓: tar xvf zookeeper-3.4.13.tar.gz

  3. 修改配置文件:

    1. dataDir=/opt/data/zookeeper/data
      存儲(chǔ)快照文件的目錄,默認(rèn)情況下, 事務(wù)日志也會(huì)存儲(chǔ)在該目
      dataDir錄上。由于事務(wù)日志 的寫(xiě)性能直接影響 ZooKeeper 性能,因此 建議同時(shí)配置參數(shù) dataLogDir
      dataLogDir=/opt/data/zookeeper/logs

    2. 集群配直。首先在 3 臺(tái)機(jī)器的/etc/hosts 文件中加入 3 臺(tái)機(jī)器 的 IP 與機(jī)器域名映射, 域名自定義, 這里分別命名為 server-I、 server-2、 server-3, 3 臺(tái)機(jī)器 IP與機(jī)器域名映射關(guān) 系如下:

    10.211.55.4 server-1
    10.211.55.5 server-2
    10.211.55.6 server-3

    1. 進(jìn)入其中一臺(tái)機(jī)器的Zookeeper安裝路徑conf,添加

    server.1=server-1:2888:3888
    server.2=server-2:2888:3888
    server.3=server-3:2888:3888

    端口號(hào)2888表示該服務(wù)器與集群中l(wèi)eader交換信息的端口,默認(rèn)為2888, 3888表示選舉時(shí)服務(wù)器相互通信的端口。

    1. 接著在${dataDir}路徑下創(chuàng)建一個(gè)myid文件,myid存放的值就是服務(wù)器的編號(hào),即對(duì)應(yīng)上面的1、2、3。ZooKeeper在啟動(dòng)時(shí)會(huì)讀取 myid文件 中的值與 zoo.cfg文件中的配置信息進(jìn)行比較, 以確定是哪臺(tái)服務(wù)器。

    2. 將配置好的zoo.cfg拷貝到其他兩臺(tái)機(jī)器,并分別創(chuàng)建對(duì)應(yīng)的myid,為了操作方便,我們可以將Zookeeper相關(guān)環(huán)境變量添加到/etc/profile文件中,如:
      export ZOOKEEPER_HOME=/home/xxx/software/zookeeper-3.4.13
      PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin

    3. 驗(yàn)證。 zkServer.sh start
      zkServer.sh status
      輸出下面類(lèi)似結(jié)果表示安裝成功

       ```
       ZooKeeper JMX enabled by default
       Using config: /home/xxx/software/zookeeper-3.4.13/bin/../conf/zoo.cfg
      

Mode: follower
```

注意: centos7默認(rèn)使用firewall作為防火墻,并默認(rèn)開(kāi)啟, 在啟動(dòng)zk時(shí)需要關(guān)閉防護(hù)墻,不然無(wú)法通信,查看防火墻狀態(tài): firewall-cmd --state 停止防火墻: systemctl stop firewalld.service 禁止防火墻開(kāi)機(jī)啟動(dòng):systemctl disable firewalld.service

kafka安裝

  1. 下載 http://kafka.apache.org/downloads
    當(dāng)前 Kafka 最新版本為 kafka_2.12-2.1.0.tgz,其中 2.12 代表 Scala 版本, 2.1.0 表示 Kafka 的版本

  2. 解壓安裝 tar xvf kafka_2.12-2.1.0.tgz, 為了操作方便,這里我們對(duì)kafka的環(huán)境變量進(jìn)行設(shè)置, 在/etc/profile 文件中加入kafka的安裝路徑,

export KAFKA_HOME=/home/xxx/software/kafka_2.12-2.1.0
PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin:\$ZOOKEEPER_HOME/bin:\$KAFKA_HOME/bin
  1. 修改配置 。修改$KAFKA_HOME/config 目錄下的 server.prope叫es文件,為了便于后 續(xù)集群環(huán)境搭建的配置, 需要保證同一個(gè)集群下 broker.id要唯一,因此這里手動(dòng)配置 broker.id, 直接保持與ZooKeeper的myid值一致, 同時(shí)配置日志存儲(chǔ)路徑。server.properties修改的配置 如下 :
    broker.id=l #指定代理的 id
    log.dirs=/opt/data/kafka- logs #指定 Log 存儲(chǔ)路徑
    zookeeper . connect=server-1:2181 , server - 2:2181 , server-3:2181

在三臺(tái)機(jī)器上分別修改配置文件server.properties, 并修改對(duì)應(yīng)的broker.id.

  1. 啟動(dòng)。
    kafka-server-start.sh -daemon ../config/server.properties
    執(zhí)行 jps命令查看 Java進(jìn)程,此時(shí)進(jìn)程信息至少包括以下幾項(xiàng):
    15976 Jps
    14999 QuorumPeerMain
    15906 Kafka

  2. 通過(guò) ZooKeeper 客戶(hù)端登錄 ZooKeeper 查看目錄結(jié)構(gòu),執(zhí)行以下命令:
    zkCli.sh -server server 1:2181 #登錄 ZooKeeper
    ls / #查看 ZooKeeper 目錄結(jié)構(gòu)
    ls /brokers/ ids 輸出 [1, 2, 3]

    由/brokers/ids 節(jié)點(diǎn)存儲(chǔ)的元數(shù)據(jù)可知, 3臺(tái)機(jī)器的 Kafka 均已正常己?jiǎn)?dòng)。至此, Kafka 分布式環(huán)境搭建過(guò)程介紹完畢。

kafka實(shí)戰(zhàn)

  1. 創(chuàng)建一個(gè)擁有3個(gè)副本的topic:

kafka-topics.sh --create --zookeeper 10.211.55.6:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

kafka-topics.sh --list --zookeeper 10.211.55.5:2181
my-replicated-topic

現(xiàn)在我們搭建了一個(gè)集群,怎么知道每個(gè)節(jié)點(diǎn)的信息呢?運(yùn)行“"describe topics”命令就可以了:

kafka-topics.sh --describe --zookeeper server-1:2181 --topic my-replicated-topic

Topic:my-replicated-topic       PartitionCount:1        ReplicationFactor:3     Configs:
        Topic: my-replicated-topic      Partition: 0    Leader: 2       Replicas: 2,3,1 Isr: 2,3,1

第一行是對(duì)所有分區(qū)的一個(gè)描述,然后每個(gè)分區(qū)都會(huì)對(duì)應(yīng)一行,因?yàn)槲覀冎挥幸粋€(gè)分區(qū)所以下面就只加了一行。
leader:負(fù)責(zé)處理消息的讀和寫(xiě),leader是從所有節(jié)點(diǎn)中隨機(jī)選擇的.
replicas:列出了所有的副本節(jié)點(diǎn),不管節(jié)點(diǎn)是否在服務(wù)中.
isr:是正在服務(wù)中的節(jié)點(diǎn).

在我們的例子中,節(jié)點(diǎn)2是作為leader運(yùn)行。

修改topic過(guò)期時(shí)間
默認(rèn)是7天 修改為3天
kafka-topics.sh --zookeeper server-1:2181 -topic xxxx --alter --config retention.ms=259200000

  1. 往topic發(fā)送消息:
    kafka-console-producer.sh --broker-list server-1:9092 --topic my-replicated-topic

  2. 消費(fèi)這些消息:

kafka-console-consumer.sh --bootstrap-server server-1:9092 --from-beginning --topic my-replicated-topic

  1. 測(cè)試一下容錯(cuò)能力:

broker2作為leader運(yùn)行,現(xiàn)在kill掉:
jps
22839 QuorumPeerMain
22334 Jps
1999 Kafka
[xxx@centos-linux-2 config]$ kill -9 1999

kafka-topics.sh --describe --zookeeper server-1:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 3 Replicas: 2,3,1 Isr: 3,1

現(xiàn)在leader為3,

雖然最初負(fù)責(zé)續(xù)寫(xiě)消息的leader down掉了,但之前的消息還是可以消費(fèi)的:

kafka-console-consumer.sh --bootstrap-server server-1:9092 --from-beginning --topic my-replicated-topic
hello
world
nihao
yes
hello

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容