随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

Kafka队列消息和发布订阅消息

1、kafka自动创建主题
在配置文件里指定好kafka的topic之后,调用send方法会自动帮我们创建好topic,只是创建的topic默认是1个副本和1个分区的,这一般不能满足我们的要求,所以我们还需要在kafka的${KAFKA}/config/server.properties里增加或修改以下参数:

num.partitions=3
auto.create.topics.enable=true
default.replication.factor=3

 

之后,kafka自动帮我们创建的主题都会包含3个副本和3个分区。

2、查看主题列表

cd /opt/kafka_2.12-2.5.0/bin/
./kafka-topics.sh --list --zookeeper 172.16.0.2:2181/kafka

注:172.16.0.2:2181/kafka配置可以在server.properties查看

3、删除主题
默认情况下Kafka是不允许删除主题,如果想要删除主题,在kafka的${KAFKA}/config/server.properties里增加以下参数:
delete.topic.enable=true

cd /opt/kafka_2.12-2.5.0/bin/
./kafka-topics.sh --delete --topic mldn-topic --zookeeper 172.16.0.2:2181/kafka

一般而言,对于kafka操作建议在第一次启动之前就做好所有得操作

4、一直强调Kafka是一个发布订阅的消息组件,但是发现即便程序中启动了多个消费端,但是最终也只能够有一个消费者可以接收到发送者发送的内容,因为此时设置的分区只有一个,那么一个只能够表示一对一关系。于是下面创建一个新的主题,该主题设置三个分区:

cd /opt/kafka_2.12-2.5.0/bin/
./kafka-topics.sh --create --zookeeper 172.16.0.2:2181/kafka --replication-factor 1 --partitions 3 --topic mldn-three

假如启动4个消费者,启动1个生产者,此时所设置的消费者数量为3个,同时这三个消费者处于同一个组之中(props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-1") ),所以变为了三个消费者处理一个生产者的操作情况,所有消费者轮流进行处理。

5、如果此时你所设置的消费者的组ID不同,那么该消息将变为主题订阅消息。所有的消费者将取得各自的全部内容。组不同不同消费者接收到的消息数据是相同的。

props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-1");
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-2");
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-3");
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-4");

 

结论:如果现在设置的消费组相同,则表示属于队列消息,队列消息可以容纳的消费者最大为分区数量;
如果设置的消费组不同,则表示主题订阅消息,那么订阅者可以有无数多个。

posted on   Ruthless  阅读(2784)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2019-06-21 Excel解析easyexcel工具类
2018-06-21 微服务化的十个设计要点
2013-06-21 Oracle 行列转换总结
2013-06-21 PL/SQL Developer中输入SQL语句时如何自动提示字段
2013-06-21 oracle timestamp转换date及date类型相减
2013-06-21 oracle常用的数据字典
2013-06-21 数据库的导入导出
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示