kafka 、mqtt、modbus 消息模型
一、MQTT
MQTT 服务质量(QoS)
服务质量(QoS)级别是一种关于发送者和接收者之间信息投递的保证协议。
有三种 QoS级别:
至多一次:0
至少一次:1
只有一次:2
QoS 0 至多一次:
0 是最低级别,具有最高传输性能,接收者不应答,发送者也不保存和重发消息。
QoS 1 至少一次:
1 级别,可以保证消息至少被送达接收者一次。但也能被送达多次。
发送者会保存消息,直到收到接收者发送的puback格式的应答命令。
系统通过对比包的标识符来确定一对publish 和 puback 的完成情况。规定时间内没收到 puback,发送者重发publish消息。
例: 假如broker 收到消息,它会将消息投递给所有此消息订阅者,饭后向发布者应答一个 puback。
重复(DUP)标志会在publish 被重发时设置,标志只用作程序内部,不会被broker处理,也不会被客户端处理。无论重复(DUP)标志如何,接收者都会发送一个puback应答。
2 级别 是最高级别。保证每条消息只被接收一次。最安全,也最慢。其通过发送者和接收者的两次对话来实现。
QoS降级
发送端 到 broker的QoS级别由发送端定义,broker到接收端的QoS级别由接收端定义。
对于同一个客户端来说,每一个数据包的标识符都是唯一的。
同一客户端和broker之间每一个数据包的标识符都是唯一的。如果通信流程执行完毕,那么相同的标识符就可以被复用。
QoS 1 和 QoS 2 的队列,发送给掉线设备的消息将会存储起来,直到设备再次可用。但是队列只在客户端使用持久化时才会产生。
二、Modbus
modbus 驱动程序接受数据,无需关心数据是否接受完毕,只要有数据发过来,都收到缓冲区。然后再应用层开启任务定时扫描缓冲区的新数据,通过帧头帧尾标识符校验等判断接受帧的正确性。正确再处理,不正确丢弃。
三、Kafka
1、kafka 有两种常用消息模型
队列模型(queuing) 和发布-订阅模型(publish-subscribe)
队列模型: 一组消费者从服务器读取消息,一条消息只由其中一个消费者来处理。
发布-订阅模型:消息被广播给所有消费者,接收到消息的消费者都可以处理此消息。
2、kafka 的消费者和消费者组
kafka为两种模型提供了单一的消费者抽象模型:消费者组
假如 所有消费者都在一个组中,那么就是 队列模型
假如 所有消费者都在不同的组中,那么就是 发布 订阅模型