kafka基础工作机制是消息发送者可以将消息发送到kafka上指定的topic,而消息消费者,可以从指定的topic上消费消息。

kafka体系中的一些概念:
**消费者组:**每个消费者可以指定一个所属的消费者组,相同消费者组的消费者共同构成一个逻辑消费者组。每一个消息会被多个感兴趣的消费者组消费,但是在每一个消费者组内部,一个消息智慧被消费一次。
topic :这是一个逻辑概念,一个topic被认为是业务含义相同的一组消息。客户端都通过绑定topic来生产或者消费自己感兴趣的话题。
分区partition:topic只是一个逻辑概念,而partition就是实际存储消息的组件。每个partition就是一个queue队列结构。所欲偶消息以FIFO的顺序保存在这些partition分区中。
快速搭建单机服务
kafka的运行环境非常简单,只要有jvm虚拟机就可以。
kafka安装
官网下载地址:https://kafka.apache.org/community/downloads/ 我们选择下载kafka_2.13-3.8.0.tgz版本。
注意:前面2.13是开发kafka的Scala语言版本,后面3.8.0是kafka版本。
上传服务器,解压即可使用。
zookeeper启动
kafka需要基于zookeeper启动。并且kafka自带zookeeper。
yaml
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
启动kafka
yaml
nohup bin/kafka-server-start.sh config/server.properties &
kafka基本使用
创建topic
yaml
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test
Created topic test.
发送消息给topic
yaml
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
>123
>345
>456
>
接收消息
yaml
#这样之前发送的消息,接收不到,只能接收新发送的消息
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
567
#--from-beginning 是指从开始消息接收
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
123
345
456
567
#--partition 0 --offset 2 指定从第3条开始接收
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --partition 0 --offset 2
456
567
看似消息发送给了topic,实际是存储到了topic中的一个partition中,每一个消息都有一个编号,就是offset的编号,指定partition 和offset 可以选择接收消息
消费者组
查看消费者组信息
yaml
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group testGroup
Consumer group 'testGroup' has no active members.
组名称 partition编号 当前消费了多少消息 总共有多少消息 还剩多少消息
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
testGroup test 0 10 10 0 - -
当两个相同消费者组都监听时,只能有一个消费者组收到消息
yaml
#第一个消费者组
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --group testGroup
1
2
3
yaml
#第二个消费者组
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --group testGroup
当两个不同消费者组都监听时,都能收到消息
yaml
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --group testGroup2
4
5
6
理解kafka的消息传递机制
kafka的消息发送者和消费者通过topic来进行业务沟通。实际上,所有的消息是存在服务端的partition这样一个数据结构中的。
