参考 https://www.w3cschool.cn/apache_kafka/apache_kafka_basic_operations.html
kafka配置
先搞个单节点单代理的配置。需要配置好java zookeeper kafka。需要先启动zookeeper,因为kafka需要它!
1 zookeeper启动
/kafka/bin目录中命令
sudo bin/zookeeper-server-start.sh config/zookeeper.properties
这时会有bug启动不了。
java找不到kafka-run-class.sh: line 309: exec: java: not found。
办法:
sudo ln -s ~/Desktop/jdk-16.0.2 /usr/bin/java
之后 再进行启动,成功。
2 kafka broker 启动
sudo bin/kafka-server-start.sh config/server.properties
发现拒绝连接?
我的办法是:
改了下zookeeper.properties的dataDir,重试成功。
搞下算是启动了,好些打印信息,kafa server.properties里面参数非常多。目测上百个吧。
输个jps也跑不了,不知为何?
链接中的提到的消息,也看不到。
821 QuorumPeerMain zookeeper守护进行
928 Kafka kafka守护进程
931 Jps
windows下的测试
2.1 单节点单代理配置
创建两个主题
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic kftopic_game1
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic kftopicgame2
列出创建的主题
bin/kafka-topics.sh --list --zookeeper localhost:2181
在/tmp/kafka-logs文件夹中可以看到上面创建的主题
2.1.1 启动生产者发送消息
语法
sudo bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-name
sudo bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic topic-name
如
sudo bin/kafka-console-producer.sh --broker-list locahost:9092 --topic kftopicgame2
sudo bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic kftopic
–broker-list 代理代表可有多个,端口为9092或其它
启动后,stdin会等待用户输入消息并发布至kafka集群,我输入了两消息。
这时再到主题目录下发现在log文件有内容了。
2.1.2 启动消费者接收消息
语法
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topicname --from-beginning
如
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9202 --topic kftopicgame2 --from-beginning
同样的消息发过去,消费端不会打印输出
2.2 单节点多代理配置
先启动zookeeper服务器
复制server.properties到两个新的配置文件中sever-1.properies server-2.properties。并进行修改。
server-1.properties
broker.id=1
port=9093
log-dir=/tmp/kafka-logs-1
server-2.properties
broker.id=2
port=9094
log-dir=/tmp/kafka-logs-2
启动多个代理
broker1
bin/kafka-server-start.sh config/server.properties
broker2
bin/kafka-srever-start.sh config/server-1.properties
broker3
bin/kafka-server-start.sh config/server-2.properties
现在有三个代理在运行着。
我们现在有3个不同的代理,可以将复制因子值指定为3个。如果是2个或n个代理可指定2或n个。
sudo bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic kfmultitopic
可以查看哪个代理正是侦听当前创建的主题
sudo bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic kfmultitopic1
sudo bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic kfmultitopic1
输出如下
zhaox@ubuntu:~/Desktop/kafka/kafka_2.12-2.8.0$ sudo bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic kfmultitopic1
Topic: kfmultitopic1 TopicId: g6zv00s6QkWP2d4Ey5hciw PartitionCount: 1 ReplicationFactor: 3 Configs:
Topic: kfmultitopic1 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
zhaox@ubuntu:~/Desktop/kafka/kafka_2.12-2.8.0$
第一行给出的是主题摘要,主题名称及id,分区数,复制因子。第二行是分区的随机选择部分的领导者。
第二行中的 Leader:0 表明(borker.id=0)的是领导者,Replicas:0,1,2 意味着所有代表复制主题,最后Isr是in-sync副本的集合。这是副本的子集,当前活着。
2.2.1 启动生产者发送消息
这个过程跟单节点的配置相同。
sudo bin/kafka-console-producer.sh --borker-list localhost:9092 localhost:9093 localhost:9094 --topic kfmultitopic1
2.2.2 启动消费者消费消息
这个过程跟单节点的配置相同。
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kfmultitopic1 --from-beginning
sudo bin/kafka-console-consumer.sh --bootstrap-server loalhost:9092 --topic kfmtopic --from-beginning
又试了下 换了个主题kfmtopic发现是好使的。在虚拟机下消息有些慢。
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic kfmtopic --from-beginning
2.2.3 删除主题
有个主题不想要了,刚才也建错了可以删除
sudo bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic kfmultitopics1
这时再describe主题信息则已经删除
2.2.4 修改主题
sudo bin/kafka-topics.sh --zookeeper localhost:2181 --alter topic kfmtopic --partitions 2
结果成功了