Kafka集群安装

环境:kafka_2.10-0.10.2.1.tgz,Hadoop-2.7.3集群,zookeeper-3.4.10

安装kafka之前,需要先安装zookeeper集群。可以参考zookeeper安装

说明一下:2.10是scala是版本,0.10.2.1才是kafka的版本。

1.解压到指定目录

    tar -zxvf kafka_2.10-0.10.2.1.tgz -C /usr/local

2. 配置kakfa

      涉及到的配置文件为${KAFA_HOME}/config/server.properties必须要配置的是这三个参数:broker.id、log.dirs、zookeeper.connect。broker.id表示当前broker的id,要求是唯一的非负数。log.dirs表示kafka日志的存放目录。zookeeper.connect表示连接的zookeeper的地址。          

broker.id=0
log.dirs=/usr/local/kafka_2.10-0.10.2.1/kafka_logs
zookeeper.connect=Desktop:2181,Server1:2181,Server2:2181,Server2:2181

    注意:需要先创建/usr/local/kafka_2.10-0.10.2.1/kafka_logs目录。我这里的Desktop是Master节点。Server是Slave

    

3.复制到其他节点    

    zhang@Desktop:/usr/local$ scp -r kafka_2.10-0.10.2.1/ zhang@Server1:/usr/local

    zhang@Desktop:/usr/local$ scp -r kafka_2.10-0.10.2.1/ zhang@Server2:/usr/local

    zhang@Desktop:/usr/local$ scp -r kafka_2.10-0.10.2.1/ zhang@Server3:/usr/local

    在Server1机器上将server.properties配置文件的broker.id值改为1。

     在Server2机器上将server.properties配置文件的broker.id值改为2。

     在Server3机器上将server.properties配置文件的broker.id值改为3。

4.添加环境变量

    在Desktop(也就是Master),Server1,Server2,Server3的/etc/profile文件中添加如下内容:    

export KAFKA_HOME=/usr/local/kafka_2.10-0.10.2.1
export PATH=${KAFKA_HOME}/bin:$PATH

    每个主机执行完了别忘了执行:source /etc/profile

5.启动验证

    在Desktop(也就是Master),Server1(Slave1),Server2,Server3上分别执行kafka启动命令:

zhang@Desktop:~$ cd ${KAFKA_HOME}
zhang@Desktop:/usr/local/kafka_2.10-0.10.2.1$ kafka-server-start.sh -daemon ./config/server.properties

    

    这里的xcall.sh是我自己的一个脚本。相当于在每台节点上执行同一个命令。

    如果每个节点都成功启动了Kafka这个进程,说明搭建成功。如果发现某台机器上没有kafka这个进程,可以将kafka的启动命令去掉参数-daemon(加上的话表示后台启动),这样可以直接在屏幕上看到错误信息。

     如果kafka进程无法关闭的话,可以使用:kill 12308关闭。

6.测试用例

    测试用例采用发布-订阅模式(也就是主题模式)

        (1)创建一个主题        

        创建一个有3个分区,一个副本的主题test主题。随便在集群中的哪个节点创建都可以。

kafka-topics.sh --zookeeper Desktop:2181,Server1:2181,Server2:2181,Server3:2181 --create --topic test --replication-factor 1 --partitions 3

      (2)创建一个生产者

       在Master创建一个生产者        

kafka-console-producer.sh --broker-list Desktop:9092,Server1:9092,Server2:9092,Server3:9092 --topic test

      (3)在Slave节点上创建消费者

        我在每个Slave节点上都创建了一个消费者。在每个Slave节点执行命令:        

kafka-console-consumer.sh --zookeeper Desktop:2181,Server1:2181,Server2:2181,Server3:2181  --topic test --from-beginning

        (4)发布消息

        然后在生产者(Master)终端发消息。

        

        可以看到,在每个消息者终端都接收到了一样的消息。

Slave1:       

Slave2:


Slave3:


常见问题解决:

1.Kafka启动后自动关闭。

    查看安装目录下的logs目录中的日志。其中kafkaServer.out中有报错:    

[2018-06-05 21:13:40,831] INFO shutting down (kafka.server.KafkaServer)
[2018-06-05 21:13:40,835] INFO EventThread shut down for session: 0x0 (org.apache.zookeeper.ClientCnxn)
[2018-06-05 21:13:40,839] INFO shut down completed (kafka.server.KafkaServer)
[2018-06-05 21:13:40,840] FATAL Fatal error during KafkaServerStartable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)
org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server 'Desktop:2181,Server1:2181,Server2:2181,Server3:2181' with timeout of 6000 ms
        at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:1233)
        at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:157)
        at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:131)
        at kafka.utils.ZkUtils$.createZkClientAndConnection(ZkUtils.scala:106)
        at kafka.utils.ZkUtils$.apply(ZkUtils.scala:88)
        at kafka.server.KafkaServer.initZk(KafkaServer.scala:326)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:187)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39)
        at kafka.Kafka$.main(Kafka.scala:67)
        at kafka.Kafka.main(Kafka.scala)
[2018-06-05 21:13:40,842] INFO shutting down (kafka.server.KafkaServer)

 看信息,是因为配置文件中配置了zookeeper.connection。但是zkServer并没有启动。解决方法是先启动配置文件中的所有zkServer,再启动kafka。


   



    

    

    

     

       





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值