kafka的安装及集群的搭建

徘徊边缘 提交于 2020-03-08 04:49:10

      关于kafka的介绍就暂时不写了,我们根据官网来看看如何安装及搭建kafka消息中间件,首先我们去官网把kafka的安装包下载下来,地址是https://www.apache.org/dyn/closer.cgi?path=/kafka/2.4.0/kafka_2.12-2.4.0.tgz,因为我们大多都是用的Windows,因此需要将下载下来的安装包上传到Linux环境上面,上传上去后,我们通过以下命令操作

# tar -xzf kafka_2.12-2.4.0.tgz
# cd kafka_2.12-2.4.0

       进入到kafka文件夹中后,可以看到有bin、libs、config等文件夹,在bin目录里可以看到下面的目录结构

      可以看到有关于connect、kafka及zookeeper的配置信息,因此我们可以使用kafka提供的zookeeper来测试使用,如果在正式环境中我们还是需要自己去创建zookeeper集群的,这样才能保证可靠性,接下来我们就需要启动zookeeper了,因为kafka是依赖于zookeeper来做一些操作的,这个将会在后面文章中介绍到,这里就不在叙述,先启动zookeeper吧,如下 

./bin/zookeeper-server-start.sh config/zookeeper.properties 

       完成了zookeeper的启动,接下来我们就需要启动kafka了,启动方式如下:

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

        服务启动完成后,我们就可以创建topic了

./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

       创建完成后我们检查下是否创建topic成功,方式如下

./bin/kafka-topics.sh --list --bootstrap-server localhost:9092

        接下来我们对test的topic发送消息

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>hello
>hi
>

       有发送就有消费,我们创建test的topic的消费

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
>hello
>hi

       我在使用该方式的消费者的时候有一定时间的延迟,可能是和机器性能有关, 这也说明我们已经创建kafka已经成功了,现在我们这个只是单点kafka,接下来我们就需要创建一个kafka的cluster集群了,因为目前也只要一台机器,所有就创建一个单机版的cluster集群,操作如下

# cp config/server.properties config/server-1.properties
# cp config/server.properties config/server-2.properties

       接下来修改server-1.properties和server-2.properties文件

config/server-1.properties:
    broker.id=1
    listeners=PLAINTEXT://:9093
    log.dirs=/tmp/kafka-logs-1
 
config/server-2.properties:
    broker.id=2
    listeners=PLAINTEXT://:9094
    log.dirs=/tmp/kafka-logs-2

      需要注意的是在cluster集群中,每个broker的id是唯一的,listeners是用于套接字服务器监听的地址,一般和zookeeper地址不一样时,配置相应服务器的地址,方式如下listeners = PLAINTEXT://your.host.name:9092,如果和zookeeper地址相同,可以像上面那样省略掉,但是一般都要设置。log的配置只是为了把日志存放在不同的文件夹中。做完以上步骤后,我们分别启动server-1.properties和server-2.properties,如下

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-server-start.sh config/server-1.properties


[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-server-start.sh config/server-2.properties

        成功启动后,我们就可以再新建一个topic了,如下

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic

       其中replication-factor表示创建topic一共有3个存储副本,partitions指的是分区,这些都会在后面文章中介绍,我们接下来看下这个topic的存放信息,这里注意需要使用describ命令:

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic: my-replicated-topic      PartitionCount: 1       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: my-replicated-topic      Partition: 0    Leader: 1       Replicas: 1,2,0 Isr: 1,0,2

       其中leader表示哪一个节点是主节点,负责给定分区的所有读写的节点。每个节点都是分区中随机选择的一部分的leader。my-replicated-topic的主节点位于id为1的节点上面,还记得前面定义的broker.id吗?

       Replicas是复制这个分区的日志的节点列表,不管它们是主节点还是活动节点。

       “isr”可以进行是“同步”副本的集合。这是副本列表的一个子集,它指当前还存活的节点。

       我们对比下前面创建的topic test的信息

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test
Topic: test     PartitionCount: 1       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: test     Partition: 0    Leader: 0       Replicas: 0     Isr: 0

       可以看到因为它是在cluster集群之前创建的,因此也还是只能存在在节点0上面,我们在来看看我们能否成功发送消息到my-replicated-topic的topic上面

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
>cluster topic
[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
cluster topic

       已经成功发送过去了,说明我们的集群是正确的,我们然后通过命令

[root@localhost kafka_2.12-2.4.0]# ps aux | grep server-1.properties

      来将server-1.properties对应的kafka线程kill掉,在来查看topic是my-replicated-topic的信息

[root@localhost kafka_2.12-2.4.0]# ./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic: my-replicated-topic      PartitionCount: 1       ReplicationFactor: 3    Configs: segment.bytes=1073741824
        Topic: my-replicated-topic      Partition: 0    Leader: 2       Replicas: 1,2,0 Isr: 2,0

       可以看到现在leader已经从1变为2了,同时isr也只有2和0了,说明已经实现了集群的负载均衡,以及存活的节点也只有2和0了。以上就是一个简单的cluster集群的搭建过程,更多的细节可以参考官网http://kafka.apache.org/quickstart

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!