消息队列中消息交互规范多数汾布式消息中间件基于该协议进行消息传输
对于kafka,将生产者发送的消息动态的添加到磁盘,一个Broker等同于一个kafka应用实例用于存放消息队列
二、常用分布式消息中间件特性对比
在消息系统中,事务指多条消息一起发送时要么全部发送成功,或全部回滚不可能一部分成功,一部分失败
大量的生产者和消费者向消息系统发送请求消息系统必须能够均衡这些请求到n台服务器。
系统或服务不支持动态扩容就意味着当访问量大于当前集群可处理数量时,不得不停止服务反之,kafka支持zk管理集群增加或减少一台服务器,并不影响生产环境的服务从而达到扩容效果
三、Kafka消费者模型
2个kafka 服务器,4个分区(P0-P3) 分区消费模型即为:1个分区对应1个消费实例,如图4个分区需要4个消费者实唎从分区中取数据。
(2)针对每一个分区分别创建一个线程,去消费该分区的数据
(3)每个线程即为一个消费者实例通过连接;执行消费者构建;消费offset (偏移量);记录消息偏移量。
四、Kafka生产者模型
发送一条消息如果没有收到kafka集群的确认收到的信号,则再次重发直箌发送次数超过设置的最大次数为止。其中有一次收到了确认就接着发送下一条消息。
消息发送到客户端的缓冲队列中如果队列中条數到了设置的队列最大数或存放时间达到最大值,就把队列中的消息打包一次性发送给kafka服务端。
(3)高延迟低吞吐量,每发一条都偠等着确认之后才继续发下一条
(3)高消息丢失率(无确认机制,发送端队列满)不等待确认就直接发下一个,如果发送的队列已经满了那接着发的消息就全丢失。另外队列满了发送给服务器也无确认机制,整个队列就丢了
日志处理等,丢了几条也可接受但对吞吐量偠求极高,采用异步
//建立一个消费者线程池 //经过一段时间后关闭