• KAFKA的部署与使用


    kafka的部署模式

    1. 单节点Broker部署
    2. 单节点多Broker部署
    3. 集群部署(多节点多Broker部署)
    • 实际的生产环境中使用的是第3中方式,以集群的方式来部署kafka。kafka强依赖ZK,如果想要使用Kafka,就必须安装ZK,kafka中的消息偏置信息、kafka集群、topic信息会被存储在ZK中。有人可能会说在在使用kafka的时候就没有安装ZK,那是因为kafka内置了一个ZK,一般我们不使用它。
    • 单节点ZK部署

    下载Zookeeper并解压到指定目录

    $ wget http://www-eu.apache.org/dist/zookeeper/zookeeper-3.5.1-alpha/zookeeper-3.5.1-alpha.tar.gz
    $ tar -zxvf zookeeper-3.5.1-alpha.tar.gz -c /opt/zookeeper
    

     进入Zookeeper的config目录下

    $ cd /opt/zookeeper/conf
    

    拷贝zoo_sample.cfg文件重命名为zoo.cfg,然后修改dataDir属性

    # 数据的存放目录
    dataDir=/home/hadoop/zkdata
    # 端口,默认就是2181
    clientPort=2181
    

    配置环境变量

    # Zookeeper Environment Variable
    export ZOOKEEPER_HOME=/opt/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin 

    Zookeeper 启动停止命令

    $ zkServer.sh start
    $ zkServer.sh stop
    • 单节点Broker部署及使用

    • Kafka中单节点部署又分为两种,一种为单节点单Broker部署,一种为单节点多Broker部署,因为是节点的kafka,所以在安装ZK的时候也只需要单节点即可

    部署架构

     

     配置Kafka

    vim $KAFKA_HOME/config/server.properties
    # broker的全局唯一编号,不能重复 broker.id
    =0 # 监听 listeners=PLAINTEXT://:9092 # 日志目录 log.dirs=/home/hadoop/kafka-logs # 配置zookeeper的连接(如果不是本机,需要该为ip或主机名) zookeeper.connect=localhost:2181

    启动Zookeeper

    [hadoop@hadoop001]$zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    

    启动Kafka

    $ kafka-server-start.sh $KAFKA_HOME/config/server.properties
    

    打印的日志信息没有报错,可以看到如下信息

    [Kafka Server 0], started (kafka.server.KafkaServer)

    但是并不能保证Kafka已经启动成功,输入jps查看进程,如果可以看到Kafka进程,表示启动成功

    [hadoop@hadoop001 ~]$ jps
    17940 Jps
    16966 Kafka
    13789 QuorumPeerMain
    [hadoop@hadoop001 ~]$ jps -m
    17940 Jps -m 9173 Kafka /opt/kafka/config/server.properties 
    13789 QuorumPeerMain /opt/zookeeper/bin/../conf/zoo.cfg

    创建topic

    [hadoop@hadoop001 bin]$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
    Created topic "test".

    查看所有的topic信息

    [hadoop@hadoop001 bin]$ kafka-topics.sh --list --zookeeper localhost:2181
    test
    wsk_test

     启动生产者

    [hadoop@hadoop001 bin]$ kafka-console-producer.sh --broker-list localhost:9092 --topic test
    kafaka
    zz
    zz
    kkk
    zzz
    bbb

     启动消费者

    [hadoop@hadoop001 bin]$ kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginningkafka
    kafaka
    zz
    zz
    kkk
    zzz
    bbb
    

    测试  

    • 生产者生产数据

     

    • 消费者消费数据

     我们在启动一个消费者,去掉后面的参数–from-beginning,看有什么区别

    • 总结:不带参数–from-beginning,数据的消费不会对历史数据进行消费,就是说,在这个消费启动之前的数据,都不会在这里被消费,只会消费这个消费启动以后的数据。

    Kafka 单节点多Broker部署及使用

    • 配置Kafka

    拷贝server.properties三份

    cd $KAFKA_HOME/config
    cp server.properties server-1.properties
    
    cp server.properties server-2.properties
    
    cp server.properties server-3.properties

    修改server-1.properties文件

    # broker的全局唯一编号,不能重复
    broker.id=1
    # 监听
    listeners=PLAINTEXT://:9093
    # 日志目录
    log.dirs=/home/hadoop/kafka-logs-1
    

    修改server-2.properties文件

    # broker的全局唯一编号,不能重复
    broker.id=3
    # 监听
    listeners=PLAINTEXT://:9094
    # 日志目录
    log.dirs=/home/hadoop/kafka-logs-3
    

    修改server-3.properties文件 

    # broker的全局唯一编号,不能重复
    broker.id=2
    # 监听
    listeners=PLAINTEXT://:9095
    # 日志目录
    log.dirs=/home/hadoop/kafka-logs-2
    

    启动Zookeeper

    [hadoop@hadoop001]$zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    

    启动Kafka(分别启动server1、2、3)

    $ kafka-server-start.sh $KAFKA_HOME/config/server-1.properties
    $ kafka-server-start.sh $KAFKA_HOME/config/server-2.properties
    $ kafka-server-start.sh $KAFKA_HOME/config/server-3.properties
    

    查看进程

    [hadoop@hadoop001 ~]$ jps
    19761 Kafka
    4323 Kafka
    5717 Jps
    5051 Kafka
    13789 QuorumPeerMain

    [hadoop@hadoop001 ~]$ jps -m
    12096 Jps -m
    19761 Kafka /home/hadoop/app/kafka_2.11-0.10.0.0/config/server-1.properties
    4323 Kafka /home/hadoop/app/kafka_2.11-0.10.0.0/config/server-2.properties
    5051 Kafka /home/hadoop/app/kafka_2.11-0.10.0.0/config/server-3.properties
    13789 QuorumPeerMain /home/hadoop/app/zookeeper-3.4.6/bin/../conf/zoo.cfg

    创建topic(指定副本数量为3)

    [hadoop@hadoop001 ~]$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
    Created topic "my-replicated-topic".
    

    查看所有的topic信息

    [hadoop@hadoop001 ~]$ kafka-topics.sh --list --zookeeper localhost:2181
    my-replicated-topic
    test
    wsk_test
    
    

     查看某个topic的详细信息 

    hadoop@hadoop001 ~]$ kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
    Topic:my-replicated-topic	PartitionCount:1	ReplicationFactor:3	Configs:
    	Topic: my-replicated-topic	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3
    

    启动生产者

    [hadoop@hadoop001 ~]$ kafka-console-producer.sh --broker-list localhost:9093,localhost:9094,localhost:9095 --topic my-replicated-topic
    

    启动消费者

    [hadoop@hadoop001 ~]$  kafka-console-consumer.sh --zookeeper localhost:2181 --topic my-replicated-topic --from-beginning
    • 生产者生产数据

    • 消费者消费数据

    单节点多borker容错性测试

    • Kafka是支持容错的,上面我们已经完成了kafka单节点Blocker的部署,下面我们来对Kafka的容错性进行测试,测试步骤如下

    (1)查看topic的详细信息,观察那个blocker的角色是leader,那些blocker的角色follower

    [hadoop@hadoop001 ~]$ kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
    Topic:my-replicated-topic	PartitionCount:1	ReplicationFactor:3	Configs:
    	Topic: my-replicated-topic	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3

    [hadoop@hadoop001 ~]$ jps -m
    12096 Jps -m
    19761 Kafka /home/hadoop/app/kafka_2.11-0.10.0.0/config/server-1.properties
    4323 Kafka /home/hadoop/app/kafka_2.11-0.10.0.0/config/server-2.properties
    5051 Kafka /home/hadoop/app/kafka_2.11-0.10.0.0/config/server-3.properties
    13789 QuorumPeerMain /home/hadoop/app/zookeeper-3.4.6/bin/../conf/zoo.cfg



     (2)手工kill掉任意一个状态是follower的borker,测试生成和消费信息是否正确

    步骤1中可以看到 2 为leader,1 和 3为 follower,将follower为1的进程kill掉 
    
    kill -9 19761   (查看于步骤1的jps -m)

    杀死以后继续在生产者输入数据

    • 消费者的数据

    结论:kill掉任意一个状态是follower的broker,生成和消费信息正确,不受任何影响

     (3)手工kill掉状态是leader的borker,测试生产和消费的信息是否正确

    borker2的角色为leader,将它kill掉,borker 3变成了leader 

     2,leader被杀死以后消费者会有大量的警告信息但是并没有报错

    继续在生产者输入数据,消费者依旧能照常运转消费。

    [2019-07-15 14:50:25,788] WARN [ConsumerFetcherThread-console-consumer-80431_hadoop001-1563173078257-f10aadd9-0-2], Error in fetch kafka.consumer.ConsumerFetcherThread$FetchRequest@3df9da19 (kafka.consumer.ConsumerFetcherThread)
    java.nio.channels.ClosedChannelException
        at kafka.network.BlockingChannel.send(BlockingChannel.scala:110)
        at kafka.consumer.SimpleConsumer.liftedTree1$1(SimpleConsumer.scala:98)
        at kafka.consumer.SimpleConsumer.kafka$consumer$SimpleConsumer$$sendRequest(SimpleConsumer.scala:83)
        at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SimpleConsumer.scala:132)
        at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:132)
        at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:132)

    结论:kill掉状态是leader的borker,生产和消费的信息正确

     总结:不管当前状态的borker是leader还是follower,当我们kill掉后,只要有一个borker能够正常使用,则消息仍然能够正常的生产和发送。即Kafka的容错性是有保证的!

  • 相关阅读:
    设计模式15:Interpreter 解释器模式(行为型模式)
    设计模式14:Command 命令模式(行为型模式)
    设计模式13:Template Method 模板方法模式(行为型模式)
    设计模式12: Proxy 代理模式(结构型模式)
    敏捷软件开发:原则、模式与实践——第20章 咖啡的启示
    敏捷软件开发:原则、模式与实践——第19章 类图
    敏捷软件开发:原则、模式与实践——第16章 对象图、第17章 用例、第18章 顺序图
    敏捷软件开发:原则、模式与实践——第15章 状态图
    敏捷软件开发:原则、模式与实践——第14章 使用UML
    敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述
  • 原文地址:https://www.cnblogs.com/xuziyu/p/11189181.html
Copyright © 2020-2023  润新知