关于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
来源:CSDN
作者:玉&心
链接:https://blog.csdn.net/XinhuaShuDiao/article/details/104658953