zoukankan      html  css  js  c++  java
  • Kafka学习之二 Kafka安装和使用

    部署环境Linux(Centos 6.5),JDK 1.8.0,zookeeper-3.4.12,kafka_2.11-2.0.0。

    1. 单机环境

        官方建议使用JDK 1.8版本,因此本文使用的环境都是JDK1.8。如果小于1.8版本,请看我的博客:https://www.cnblogs.com/xuejiale/p/10504845.html 将环境的JDK更新到1.8版本。(PS:我开始使用机器默认安装的JDK 1.7,在启动kafka时会报错)。

        由于Kafka依赖zookeeper,kafka通过zookeeper实现分布式系统的协调,所以我们需要先安装zookeeper。下面开始安装zookeeper:

    (1)安装zookeeper

       1)下载zookeeper并解压

        下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/,我下载的是 zookeeper-3.4.12.tar.gz

       2)创建zookeeper配置文件

         在zookeeper解压后的目录下找到conf文件夹,进入后,复制文件zoo_sample.cfg,并命名为zoo.cfg。zoo.cfg中一共四个配置项,可以使用默认配置。注意配置文件里面有一个dataDir可以修改成你自己的目录。

       3)启动 zookeeper

       进入zookeeper根目录执行 ./bin/zkServer.sh start,其他操作 start, stop, restart

    [root@centos zookeeper-3.4.12]# ./bin/zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /home/xuejiale/kafka_env/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED

    (2)安装 kafka

        1) 下载kafka并解压

        下载地址:https://www.apache.org/dyn/closer.cgi?path=/kafka/2.0.0/kafka_2.11-2.0.0.tgz,我下载的是:kafka_2.11-2.0.0.tgz

        2) 修改kafka的配置文件

        进入kafka根目录下的config文件夹下,打开server.properties,修改如下配置项,当然也可以修改 log.dirs 为其他路径。

    zookeeper.connect=localhost:2181
    broker.id=0
    log.dirs=/tmp/kafka-logs

         zookeeper.connect是 zookeeper 的链接信息,broker.id 是当前 kafka 实例的 id,log.dirs 是 kafka 存储消息内容的路径。

        3)启动kafka

        进入kafka根目录执行 ./bin/kafka-server-start.sh ./config/server.properties,config/server.properties配置项为配置项。

    [root@centos kafka_2.11-2.0.0]# ./bin/kafka-server-start.sh ./config/server.properties

        启动kafka后,如果控制台没有报错信息,则kafka已经成功启动,我们可以通过查看zookeeper中相关节点值来确认。步骤如下:

    • 启动zookeeper的client

          进入zookeeper根目录下,执行 bin/zkCli.sh -server 127.0.0.1:2181。启动后如下:

       

    • 输入命令 ls /brokers,回车,可以看到如下信息:

         

        还记得我们在配置单机环境时,修改的kafka配置项broker.id=0 吗?这里的0就是表示那个kafka的实例已经加入了kafka集群。

    2. 集群环境
        集群环境的搭建也很简单,在单机环境的基础上,让多个单机连接到同一个zookeeper即可。需要注意两点:
     (1)每个实例设置不同的broker.id。
     (2)如果多个实例部署在同一台服务器,还要注意修改log.dirs为不同目录,确保消息存储时不会有冲突。

    3. kafka 接收消息

        我们通过kafka带的工具来创建一个topic,然后尝试发送和消费一个消息,直观的去感受下kafka。

    (1)创建topic

        进入kafka根目录,执行如下命令:

    ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic kafkaTest

       此命令行有几个参数,分别指明了zookeeper的链接信息,分区和副本的数量等。

       执行成功后,创建了 kafkaTest 这个topic,如下图所示:

     (2)启动消费者

       进入kafka根目录,开启一个消费者并且订阅 kafkaTest 这个topic,执行如下命令:

    ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafkaTest  --from-beginning

       看到如下图,光标停留在最前面,没有任何信息输出,说明启动消费者成功,此时在等待新的消息。

     

    (3)开启生产者

       新开一个窗口,进入kafka根目录,输入如下命令:

    ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic kafkaTest

       启动成功后,如下图,等待你输入新的消息:

    (4)发送消息

       生产者:在上面生产者的窗口输入一条消息 hello kafka,点击回车,如下图:

     

       消费者:此时切换到消费者的窗口,可以看到消费者已经消费到这条消息,在窗口中打印了出来:

     

     总结:本节搭建起kafka单机环境,然后通过kafka自带的工具,直观的感受了kafka运转的整个过程,经历了创建topic、启动生产者、启动消费者、生产者生产消息、消费者消费消息,这几个步骤。后面将会分析kafka的设计理念和原理。

      kafka数据存储https://www.cnblogs.com/jun1019/p/6256514.html

     安装kafka遇到问题及解决方法:

    问题1:启动kafka报如下错误?

    解决方法:JDK版本小于1.8,将当前环境JDK更新到1.8

    问题2:使用 kafka 创建 topic报如下错误?

    解决方法:没有启动zookeeper,启动之后再启动 kafka 即可。

    问题3:在启动kafka时报未知的名称或者服务?

    解决方法:这是由于无法识别机器名(centos)在/etc/hosts中增加下面红色部分。

    192.168.30.134 centos localhost
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

     问题4:在启动 kafka 时报找不到java?

    解决方法:启动 kafka 等脚本中会使用JAVA环境变量, 要在/etc/profile中设置环境变量。

    JAVA_HOME=/usr/jdk
    CLASSPATH=$JAVA_HOME/lib/
    PATH=$PATH:$JAVA_HOME/bin
    JAVA=$PATH:$JAVA_HOME/bin
    export PATH JAVA_HOME CLASSPATH JAVA

    参考文献:

    • https://blog.csdn.net/liyiming2017/article/details/82790574
    • http://kafka.apache.org/ (官网)
  • 相关阅读:
    13.2 抽像类与体类(Abstract & Concrete Classes) 简单
    13.3 深度隔离的界面(Deeply Parted interface) 简单
    计算天数(C++)_学习 简单
    13.1.2 纯虚函数(Pure Virutal Functions) 简单
    C++ operator关键字(重载操作符) 简单
    二月一共多少天 简单
    重载运算符操作_学习 简单
    计算两个日期之间的天数(C++) 简单
    1.2 连接信号和响应函数 简单
    用Android手机做台式机无线网卡
  • 原文地址:https://www.cnblogs.com/xuejiale/p/10505391.html
Copyright © 2011-2022 走看看