分布式消息中间件(三)——Kafka生产者消费者模型
2016-06-14 17:00
211 查看
一、Kafka回顾
1、AMQP协议
消息队列中消息交互规范,多数分布式消息中间件基于该协议进行消息传输
2、Broker
对于kafka,将生产者发送的消息,动态的添加到磁盘,一个Broker等同于一个kafka应用实例,用于存放消息队列
3、主题:分区:消息
一个分区(Patition)等同于一个消息队列,存放n条消息;一个主题(Topic)包括多个分区
二、常用分布式消息中间件特性对比
1、事务
在消息系统中,事务指多条消息一起发送时,要么全部发送成功,或全部回滚,不可能一部分成功,一部分失败
2、负载
大量的生产者和消费者向消息系统发送请求,消息系统必须能够均衡这些请求到n台服务器。
3、动态扩容
系统或服务不支持动态扩容,就意味着当访问量大于当前集群可处理数量时,不得不停止服务,反之,kafka支持zk管理集群,增加或减少一台服务器,并不影响生产环境的服务,从而达到扩容效果
高吞吐量、高水平扩展
三、Kafka消费者模型
Kafka消息系统基于发布-订阅模式,相对于ActiveMQ,没有点对点消息处理机制。
1、分区消费模型
2个kafka 服务器,4个分区(P0-P3) ,分区消费模型即为:1个分区对应1个消费实例,如图4个分区,需要4个消费者实例从分区中取数据。
2、分区消费编码思路
(1)获取分区的size,一共多少个分区;
(2)针对每一个分区,分别创建一个线程,去消费该分区的数据
(3)每个线程即为一个消费者实例,通过连接;执行消费者构建;消费offset (偏移量);记录消息偏移量。
3、组消费模型
同样4个分区,P0-P3,这里使用GroupA,GroupB,GroupA可获取0,3,1,2分区的数据,GourpB也是。分组消费模型中,每个组都能拿到kafka集群当前全量数据。
4、组消费实现思路
(1)获取group里有多少个consumer实例
(2)根据实例个数,创建线程
(3)执行run方法,启动消费
四、Kafka生产者模型
1、同步生产模型
发送一条消息,如果没有收到kafka集群的确认收到的信号,则再次重发,直到发送次数超过设置的最大次数为止。其中有一次收到了确认,就接着发送下一条消息。
2、异步生产模型
消息发送到客户端的缓冲队列中,如果队列中条数到了设置的队列最大数或存放时间达到最大值,就把队列中的消息打包,一次性发送给kafka服务端。
3、同步、异步对比
同步生产模型:
(1)低消息丢失率;
(2)高消息重复率;
(3)高延迟,低吞吐量,每发一条,都要等着确认之后才继续发下一条
异步生产模型:
(1)低延迟;
(2)高发送性能;
(3)高消息丢失率(无确认机制,发送端队列满),不等待确认就直接发下一个,如果发送的队列已经满了,那接着发的消息就全丢失。另外队列满了发送给服务器,也无确认机制,整个队列就丢了。
4、应用场景
要求不能丢消息,对吞吐量没要求,使用同步
日志处理等,丢了几条也可接受,但对吞吐量要求极高,采用异步
1、AMQP协议
消息队列中消息交互规范,多数分布式消息中间件基于该协议进行消息传输
2、Broker
对于kafka,将生产者发送的消息,动态的添加到磁盘,一个Broker等同于一个kafka应用实例,用于存放消息队列
3、主题:分区:消息
一个分区(Patition)等同于一个消息队列,存放n条消息;一个主题(Topic)包括多个分区
二、常用分布式消息中间件特性对比
1、事务
在消息系统中,事务指多条消息一起发送时,要么全部发送成功,或全部回滚,不可能一部分成功,一部分失败
2、负载
大量的生产者和消费者向消息系统发送请求,消息系统必须能够均衡这些请求到n台服务器。
3、动态扩容
系统或服务不支持动态扩容,就意味着当访问量大于当前集群可处理数量时,不得不停止服务,反之,kafka支持zk管理集群,增加或减少一台服务器,并不影响生产环境的服务,从而达到扩容效果
高吞吐量、高水平扩展
三、Kafka消费者模型
Kafka消息系统基于发布-订阅模式,相对于ActiveMQ,没有点对点消息处理机制。
1、分区消费模型
2个kafka 服务器,4个分区(P0-P3) ,分区消费模型即为:1个分区对应1个消费实例,如图4个分区,需要4个消费者实例从分区中取数据。
2、分区消费编码思路
(1)获取分区的size,一共多少个分区;
(2)针对每一个分区,分别创建一个线程,去消费该分区的数据
(3)每个线程即为一个消费者实例,通过连接;执行消费者构建;消费offset (偏移量);记录消息偏移量。
3、组消费模型
同样4个分区,P0-P3,这里使用GroupA,GroupB,GroupA可获取0,3,1,2分区的数据,GourpB也是。分组消费模型中,每个组都能拿到kafka集群当前全量数据。
4、组消费实现思路
(1)获取group里有多少个consumer实例
(2)根据实例个数,创建线程
(3)执行run方法,启动消费
四、Kafka生产者模型
1、同步生产模型
发送一条消息,如果没有收到kafka集群的确认收到的信号,则再次重发,直到发送次数超过设置的最大次数为止。其中有一次收到了确认,就接着发送下一条消息。
2、异步生产模型
消息发送到客户端的缓冲队列中,如果队列中条数到了设置的队列最大数或存放时间达到最大值,就把队列中的消息打包,一次性发送给kafka服务端。
3、同步、异步对比
同步生产模型:
(1)低消息丢失率;
(2)高消息重复率;
(3)高延迟,低吞吐量,每发一条,都要等着确认之后才继续发下一条
异步生产模型:
(1)低延迟;
(2)高发送性能;
(3)高消息丢失率(无确认机制,发送端队列满),不等待确认就直接发下一个,如果发送的队列已经满了,那接着发的消息就全丢失。另外队列满了发送给服务器,也无确认机制,整个队列就丢了。
4、应用场景
要求不能丢消息,对吞吐量没要求,使用同步
日志处理等,丢了几条也可接受,但对吞吐量要求极高,采用异步
相关文章推荐
- Getting started with ASP.NET Core MVC and Visual Studio
- 里氏替换原则
- WAS 安装配置JDK7
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- PHP KMP算法实现
- Tomcat配置一个ip绑定多个域名
- 面向对象思想设计原则
- 去除android或者iOS系统默认的一些样式总结
- 匿名内部类
- 书写是为了更好的思考
- 【HDU2222】Keywords Search(AC自动机)
- StringUtils使用小结
- android 更改api版本
- 解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题
- strtok函数和strtok_r函数
- Windows程序安装包制作——Qt Installer Framework
- 4000 安卓开发 切换应用语言和获取系统语言
- 物联网与移动宽带——未来5G的两大着眼点
- Error:(6, 0) No such property: outputDir for class: org.gradle.api.internal.project.DefaultProject_Decorated
- 【杭电oj】2099 - 整除的尾数(枚举)