rabbitmq kafka消息中间件

学习笔记

1. 对比:

MQ(Message Queue)消息中间件

用高效可靠的消息传递机制进行分布式系统间的数据交换
kafka

LinkedIn开源 Apache的 特点:基于pull模式处理消息 高吞吐量 不支持事物 对消息的重复丢失错误没有要求 适合大数据量的互联网数据收集业务

2. rabbitMQ

基于AMQP协议 

特点:面向消息队列、可靠安全 适合对数据一致性稳定性可靠性要求高 对性能吞吐量要求其次的企业

通过事物机制确保消息不丢失

2. kafka



3. 模式一:

producer--mq queue--consumer
4. 模式二
producer--mq queue--consumer1
consumer2

多个consumer并发处理 

mq分发机制是round-robin dispatching:
循环顺序分发 将第N个message非法给第N%(consumer个数)个consumer
收到consumer发的ack(acknowledgment)后删除message 继续分发下一个message;
若没有收到ack 则mq会把这个message发给下一个consumer 不是以超时为标准 而是mq判断consumer连接中断为标准。
ack机制可以enable或disable
若consumer退出 MQ可以把message发给其他consumer
若mq server退出 可以通过持久化queue和message防止数据丢失 durable=true
另一个分发机制:fair dispatching:
round-robin机制中特定message只能分发给特定的consumer(N%consumer个数) 会导致有的consumer一直忙着处理费时的message 有的consumer分给他的已经处理完 其他的不能分给他 导致他很闲

Fair 机制设置prefetch_count=1 让每个consumer都在工作

5. 模式三


exchange:从producer 接收message 按照一定规则投放到一个或多个queue

类型:1. direct 2. topic 3. fanout 广播模式 

exchange通过binding queue决定message发放给哪个queue

channel.exchange_declare声明exchange后 producer到一个不存在的exchange是禁止的

6. 模式四 direct exchange


exchange X和两个queue绑定在一起。Q1的binding key是orange。Q2的binding key是black和green。
    当P publish key是orange时,exchange会把它放到Q1。如果是black或者green那么就会到Q2。其余的Message都会被丢弃。
7. 模式五 multiple bindings

多个queue绑定同一个key 其余message丢弃

8.模式六


合并上面两个模式

9. 模式七


对上面模式的改进 binding规则不再是单一 可以是正则表达式规定的一类规则

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

rabbitmq kafka消息中间件

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭