当前位置:   article > 正文

消息队列:RabbitMQ和Kafka_kafka rabitmq

kafka rabitmq

消息队列

2种模式

  1. 点对点:consumer主动对queue监控,检查是否收到消息
  2. 订阅模式:Queue主动推送,consumer收到消息后决定是否去Queue里pull(类似微信公众号的文章推送)

优点:

  1. 解耦(通过中间件通信)
  2. 冗余:可做缓存
  3. 扩展性
  4. 顺序保证
  5. 异步通信:consumer即使down掉,消息还是保存在Queue,等consumer恢复会自动处理消息

RabbitMQ


关于Broker里的Exchange不可以直接将消息发给Queue,必须由他进行过滤,
Exchange 的四种模式:

 1. direct 模式 : 直接将消息转发到消息的 routing key 所指定的消息队列中,match不到直接丢弃
 2. fanout 模式:常用的发布/订阅模式,类似公众号推送文章,每个queue都可以处理
 3. topic模式:把收到的消息转发到所有关心 routing-key 的 queue 上,可以模糊匹配,匹配不到直接丢弃
 4. header模式:他根据消息 header 中的 “x-match” 属性匹配已经绑定的消息队列

Queue与consumer:
push模式:消费者定期主动去Queue监控是否由message
消费完之后,Queue中不存储任何消息    

Kafka

定义:分布式的消息队列

集群:每个集群都是kafka实例,每个实例叫broker,依赖于zookeeper,多个集群直接可做备份,consumer 消费的是leader topic,数据保存在topic里

配置文件位置:/etc/config/server.properties

  1. 修改broker.id
  2. 指定收到数据的位置(在指定位置可以找到创建的topic,在topic里看到000000123.index索引文件和00000123.logshou到的数据)
  3. 修改集群zookeeper

consumer依赖zookeeper保存meta数据

2个consumer可以同时消费同一个topic里的消息,zookeeper里保存consumer消费进度

  • 启动:

在bin目录下可以看到

命令:bin/kafka-server-start.sh -daemon config/server.properties

-daemon:守护进程,可以在后台运行,如果不加-daemon看到的是阻塞进程,关闭connection后Kafka停止运行

  • 停止

命令:bin/kafka-server-stop.sh 后面不需要加配置文件,加了也可以

  • 查看

查看是Kafka否运行命令:jps 

topic

查看topics命令:bin/kafka-topics.sh --zookeeper 10.1.1.1:2181 --list

创建topic命令:bin/kafka-topics.sh --create  --zookeeper 10.1.1.1:2181 --topic one --partition 2 --replication-factor 2(副本数)

PS : 此时,如果有3个集群,会在一个broker里存在一个one-0,第二个broker里存在one-1,第三个里one-1和one-0,整个集群2个one-0和one-1, 副本数不可以超过集群数

删除topic命令:bin/kafka-topics.sh --delete --zookeeper 10.1.1.1:2181 --topic one

log位置:server.log

producer

绑定topic命令:bin/kafka-console-producer.sh --broker-list 10.1.1.1:9092 --topic one

> 在此处输入要放入topic里的message

consumer

绑定topic命令:bin/kafka-console-consumer.sh --zookeeper 10.1.1.1:9092 --topic one

PS:当消息被consumer消费后在log中会生成诸多类似consumer-offset-01的偏移量log文件,若多个consumer同时消费一个topic,是按轮询偏移量的方式消费,由zookeeper进行管理

zookeeper

作用:维护一个集群,防止单机故障,同步消息,集群种的leader是由zookeeper决定,/data/version-2中存储的是zookeeper的数据

 

Kafka API

异步:2个线程,一个主线程,一个send线程

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/970768
推荐阅读
相关标签
  

闽ICP备14008679号