本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

Kafka集群部署使用与扩容教程

发布:TangLu2019-7-19 17:08分类: 服务部署 标签: kafka

一、Kafka是什么

Kafka是一种消息中间件服务。消息中间件的作用就是让生产者生产出的数据放在一个队列中,然后等待消费者来消费。这样可以避免生产者或者消费者任意一方出现问题时发生数据丢失或者效率过低的情况。由于消息队列的处理速度比数据库更快,所以在高峰期的时候,可以将一些不重要的数据放在消息队列中,等待系统慢慢消费处理。如果消息队列满了可以考虑对消息队列服务进行扩容。


二、Kafka相关名词解释

broker:kafka集群由多个kafka实例构成,每个实例就叫做broker

zookeeper:注册中心服务,每个broker在启动或者断开时会将信息告诉zookeeper,它和topic有一样的leader\follower机制

producer:生产者,由它来生产数据和决定消息的属性,比如partition和replicas的数量。kafka配置文件中虽然也可以指定,但那个只是默认值
consumer:消费者,由它来处理生产出的数据
topic:消息队列,每个topic可以分为多个partition(区),每个partition还可以配置多个replicas(副本),每个partition中有一个replicas会成为leader来负责所有的读写操作,其他replicas成为follower和它保持同步,如leader失效了,再由follower接管,确保系统的稳定。由于kafka支持集群化,所以leader和follower可能不在一个服务器中,这个时候就需要将leader的信息注册在Zookeeper中,所以Kfaka还需要Zookeeper的支持。


三、搭建Zookeeper+Kafka集群

1、首先搭建Zookeeper,可参考《ZooKeeper安装使用与集群配置教程》一文

2、下载并安装Kafka

#在kafka.apache.org/downloads下载二进制安装包,解压后即可使用
tar zxf kafka_2.11-2.1.1.tgz
mv kafka_2.11-2.1.1 /usr/local/


3、修改Kafka配置文件

#通常只需要修改server.properties这个文件,虽然还有生产者、消费者的属性文件,但是一般都是由程序去控制
vi config/server.properties
broker.id=1  #集群中每个节点ID不能相同
log.dirs=/data/kafka/log
zookeeper.connetc=192.168.1.100:2181,192.168.1.101:2181,192.168.1.102:2181/kafka  #zk服务地址与端口,最后加的/kafka代表是在zk中为kafka新建一个目录
listeners=PLAINTEST://192.168.1.100:9092  #kafka监听端口


4、后台启动kafka

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


5、登录ZooKeeper后可以看到kfaka的信息已经注册进来


kafka1.png


四、创建topic,完成数据的生产与消费

1、创建topic

./kafka-topics.sh --create --zookeeper 192.168.1.101/kafka --replication-factor 1 --partitions 1 --topic test  
#--zookeeper:如果ZK是集群的话,随便写一个地址都可以
#--replication-factor:复制的副本数
#--partitions:每个副本由几个partition组成
#--topic:队列名字


2、登录Zookeeper验证,任意一台ZK节点应该都可以看到topic的信息。不过这里看到的只是信息而已,数据其实还是在Kfaka中。先看看ZK中的数据是怎么样的:

kafka2.png


3、接着进入Kfaka配置中log.dirs所指定的路径,可以查看到Kafka中的数据。需要注意如果创建topic时--partitions设定的是1,而Kfaka又有5个集群的话,那数据只会在一个节点上看到(ZK这个时候就发挥出作用了,它能告知用户数据在哪台上)

4、生产消息到topic中

./kafka-console-producer.sh --broker-list 192.168.1.101:9092 --topic test  #为test这个队列生产消息,命令运行后会进入交互页面,输入的内容就是消息


5、从topic中消费消息,这个过程有点像Redis的订阅

./kafka-console-consumer.sh --zookeeper 192.168.1.101:2181/kafka  --topic test --from-beginning  #从test这个队列的头部开始消费


五、Kafka的扩容配置,需要对已有topic增加partition和replicas

1、首先要明白扩容的话意味着需要增加Kafka节点,所以第一件事就是在新节点上部署好Kafka,配置要和之前节点一致

2、登录ZK节点然后查看ids信息,如果发现新节点代表Kafka扩容是成功的

kafka3.png

3、列出所有topic,找到需要扩容的topic,假设这里的topic是test

./kafka-topics.sh --list --zookeeper 192.168.1.101:2181/kafka
./kafka-topics.sh --describe --zookeeper 192.168.1.101:2181/kafka --topic test  #可以看到test的partition和replicase等信息


4、 对partition进行扩容,扩容后重新查看信息可以看到变化,但是这个时候replicas依然只有一份

./kafka-topics.sh --zookeeper 192.168.1.101:2181/kafka --alter --topic test --partitions 3  #扩充到3个partitions

5、replicas的扩容需要先生成json文件,然后再用命令去读取该文件。需要注意如果该文件以前给其他topic使用过,需要重新生成一份而不能直接在上面修改,否则会失败

vi test.json
{
    "partitions": [
        {
            "topic": "test",  #需要扩容的topic
            "partition": 0,  #需要增加replicas的partitons
            "replicas": [  #replicas需要增加在哪个broker.id上
                34,
                35
            ]
        },
        {
            "topic": "test",
            "partition": 1,
            "replicas": [
                34,
                35,
                36
            ]
        }
    ]
}

6、通过json文件扩容Replicas

./kafka-reassign-partitions.sh --zookeeper 192.168.1.101:2181/kafka --reassignment-json-file test.json  --execute 


7、最后查看topic信息

./kafka-topics.sh --describe --zookeeper 192.168.1.101:2181/kafka --topic test



温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Kafka集群部署使用与扩容教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-510.html  [生成短网址]

已有 0/400 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~