2022-03-21kafka安装部署

1、下载http://kafka.apache.org/downloads.html

2、解压到/usr/local中

3、启动服务zookeeper和kafka

./zookeeper-server-start.sh ../config/zookeeper.properties 1>/dev/null 2>&1 &

./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 &

4、创建主题topic

./kafka-topics.sh --create --zookeeper localhost:2181 --config max.message.bytes=12800000 --config flush.messages=1 --replication-factor 1 --partitions 1 --topic test

查看创建好的主题

./kafka-topics.sh --list --zookeeper localhost:2181

删除主题

默认情况下Kafka的Topic是没法直接删除的,需要进行相关参数配置

bin/kafka-topics.sh --delete --topic test0 --zookeeper 192.168.187.146:2181

方式一:通过delete命令删除后,手动将本地磁盘以及zk上的相关topic的信息删除即可

方式二:配置server.properties文件,给定参数delete.topic.enable=true,重启kafka服务,此时执行delete命令表示允许进行Topic的删除

5、收发消息

生产消息

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

消费消息

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

6、设置多个broker

            首先为每个broker创建一个配置文件:

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

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

vim config/server.properties 

config/server1.properties:

broker.id=0

listeners=PLAINTEXT://192.168.10.130:9092

log.dirs=kafka-logs

zookeeper.connect=localhost:2181

config/server-1.properties:

    broker.id=1

listeners=PLAINTEXT://192.168.10.130:9093

log.dirs=kafka-logs-1

zookeeper.connect=localhost:2181

config/server-2.properties:

    broker.id=2

listeners=PLAINTEXT://192.168.10.130:9094

log.dirs=kafka-logs-2

zookeeper.connect=localhost:2181

    备注1:listeners一定要配置成为IP地址;如果配置为localhost或服务器的hostname,在使用java发送数据时就会抛出异 常:org.apache.kafka.common.errors.TimeoutException: Batch Expired 。因为在没有配置advertised.host.name 的情况下,Kafka并没有像官方文档宣称的那样改为广播我们配置的host.name,而是广播了主机配置的hostname。远端的客户端并没有配置 hosts,所以自然是连接不上这个hostname的。

    备注2:当使用java客户端访问远程的kafka时,一定要把集群中所有的端口打开,否则会连接超时

    broker.id是集群中每个节点的唯一且永久的名称,我们修改端口和日志目录是因为我们现在在同一台机器上运行,我们要防止broker在同一端口上注册和覆盖对方的数据。

    我们已经运行了zookeeper和刚才的一个kafka节点,所有我们只需要在启动2个新的kafka节点。

./kafka-server-start.sh ../config/server-1.properties 1>/dev/null 2>&1 &

./kafka-server-start.sh ../config/server-2.properties 1>/dev/null 2>&1 &

 现在,我们创建一个新topic,把备份设置为:3

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

 好了,现在我们已经有了一个集群了,我们怎么知道每个集群在做什么呢?运行命令“describe topics”

> ./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: 1    Replicas: 1,2,0    Isr: 1,2,0

“leader”:该节点负责该分区的所有的读和写,每个节点的leader都是随机选择的。

“replicas”:备份的节点列表,无论该节点是否是leader或者目前是否还活着,只是显示。

“isr”:“同步备份”的节点列表,也就是活着的节点并且正在同步leader

其中Replicas和Isr中的1,2,0就对应着3个broker他们的broker.id属性!

我们运行这个命令,看看一开始我们创建的那个节点:

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

Topic:test    PartitionCount:1    ReplicationFactor:1    Configs:

Topic: test    Partition: 0    Leader: 0    Replicas: 0    Isr: 0

这并不奇怪,刚才创建的主题没有Replicas,并且在服务器“0”上,我们创建它的时候,集群中只有一个服务器,所以是“0”。

7、测试集群的容错能力

7.1发布消息到集群

[root@administrator bin]# ./kafka-console-producer.sh --broker-list 192.168.10.130:9092 --topic my-replicated-topic

>cluster message 1

>cluster message 2

//Ctrl+C终止产生消息

7.2消费消息

[root@administrator bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.10.130:9093 --from-beginning --topic my-replicated-topic

cluster message 1

cluster message 2

//Ctrl+C终止消费消息

7.3干掉leader,测试集群容错

首先查询谁是leader

> ./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: 1    Replicas: 1,2,0    Isr: 1,2,0

可以看到Leader的broker.id为1,找到对应的Broker

[root@administrator bin]# jps -m

5130 Kafka ../config/server.properties

4861 QuorumPeerMain ../config/zookeeper.properties

1231 Bootstrap start start

7420 Kafka ../config/server-2.properties

7111 Kafka ../config/server-1.properties

9139 Jps -m

通过以上查询到Leader的PID(Kafka ../config/server-1.properties)为7111,杀掉该进程

//杀掉该进程

kill -9 7111

//再查询一下,确认新的Leader已经产生,新的Leader为broker.id=0

[root@administrator bin]# ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

Topic:my-replicated-topic      PartitionCount:1        ReplicationFactor:3    Configs:

//备份节点之一成为新的leader,而broker1已经不在同步备份集合里了

Topic: my-replicated-topic      Partition: 0    Leader: 0      Replicas: 1,0,2 Isr: 0,2

7.4再次消费消息,确认消息没有丢失

[root@administrator bin]# ./kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic

cluster message 1

cluster message 2

你可能感兴趣的:(2022-03-21kafka安装部署)