Kafka消息的可靠性测试--针对直播业务的方案选择
转自:http://blog.csdn.net/bailove/article/details/44240303
业务场景
来疯直播互动平台,每天有数百万人上下线,有数十万人同时参与互动直播聊天。用户的登陆、退出及用户间的各种交互行为如聊天、送礼、关注、投票、抢沙发等等事件都会产生大量的消息。这些消息具有瞬间爆发性,比如热门直播间刚开播,直播表演的高潮等等。而用户的礼物、星星、喇叭、沙发等这类消息是不允许丢失,必须100%送达。这就需要有一个高性能,高可靠,稳定可拓展的消息服务平台的支撑。它要求在网络压力大及服务器宕机等灾害的情况下,保证消息至少被发送到服务器一次。我们需要对大数据平台已提供的消息服务kafka进行测试。
测试环境
cpu:24 Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
内存:32G
磁盘数量:1 (普通sata盘)
kafka版本:0.8.2
集群规模:4节点
Topic副本数:3
Topic分片数(partition):4
灾难模拟
消息发送过程中宕掉其中一个节点,或同时宕掉两个节点(最多同时宕2台,因为副本数为3)
频繁宕机重启其中某个节点
交替宕机重启某一个或两个broker但是保证不能同时有3个节点宕机
(PS:同时出现三个节点宕机的情况,在近1年多运营中我们还没有遇到过,最多出现两个点宕机。)
测试结果
结论
同步_ack模式能够保证消息至少被发送一次到服务器。在三备份情况下,kafka集群不同时宕机两台以上时,能够正常给生产端和消费端提供服务。但是采用这种模式可能由于网络或服务问题导致重复发送数据,所以消费端的消费操作需要是幂等的。
同步_ack非batch
同步_ack 在不做batch的情况下单进程的发送效率比较低发送速率大概 500kb/s,增加进程数量可以提高总的发送效率。
采用这种模式,数据丢失或表现为丢失情况:
①:kafka服务器同时宕机三台以上时(副本数为3),由于没有leader服务导致producer产生的数据没有写入kafka,数据丢失。
②:消费端程序宕机,可能造成业务方面的统计错误,表现为数据丢失。此时数据没有真正丢失而是消费端消费掉的部分消息没有执行完业务逻辑表现的出来的数据丢失。消费端出现这种情况,需要有数据回滚,重新消费,补数据的机制。
同步_ack_batch
同步_ack_ batch(200条)的情况下基本达到异步_noack不做batch模式的发送速率。单客户端7m/s(如果增大batch量这个速率还会增加),多客户端基本呈线性增加,瓶颈受限于网络带宽。
采用这种模式,数据丢失或表现为丢失情况:
①:同上
②:同上
③:因是batch发送,producer会缓存了一部分数据,如果producer宕机会造成batch在内存中且还没发送出去的消息丢失。对于这种情况producer端需要做消息持久化,定时做offset的checkpoint,将已经持久化的消息发送到kafka,如果producer意外宕机,那么从checkpoint开始恢复数据重新发送。
参考方案
针对来疯的业务场景,我们大概可以将消息分为以下三种:
1.数据量大,且允许少量数据丢失。例如用户进入频道、聊天、上下线等采用异步_noack模式
2.数据量不大,数据不允许丢失。例如用户金喇叭、抢沙发、守护等采用同步_ack模式
3.数据量大,数据不允许丢失。例如用户使用星星、送礼物、投票等Producer采用同步_ack_batch模式
针对不同类消息的应用场景定制不同的发送策略,来保证消息能够可靠高效的发送到kafka服务端。
当然要保证业务可靠,除了kafka服务端的消息可靠性及性能保障外,客户端(生产端和消费端)还要做到数据持久化,数据校验及恢复,幂等操作及事务等。
此外运维也是必不可少的一环,监控客户端及服务端的各项状态,对异常情况快速报警,及时处理以保证kafka集群稳定。后续我们将继续推出kafka、storm运营相关的文章,尽情期待!
------作者简历-----------
杨万民,毕业于北京邮电大学,目前就职于优酷土豆大数据基础平台,负责集团实时计算平台的优化与运营。个人专注于storm、kafka底层技术研究。
Kafka消息的可靠性测试--针对直播业务的方案选择的更多相关文章
- kafka消息的可靠性
本文来自网易云社区 作者:田宏增 Kafka的高可靠性的保障来源于其健壮的副本(replication)策略.通过调节其副本相关参数,可以使得Kafka在性能和可靠性之间运转的游刃有余.Kafka从0 ...
- Kafka消息delivery可靠性保证(Message Delivery Semantics)
原文见:http://kafka.apache.org/documentation.html#semantics kafka在生产者和消费者之间的传输是如何保证的,我们可以知道有这么几种可能提供的de ...
- 如何保证kafka消息不丢失
背景 这里的kafka值得是broker,broker消息丢失的边界需要对齐一下: 1 已经提交的消息 2 有限度的持久化 如果消息没提交成功,并不是broke丢失了消息: 有限度的持久化(broke ...
- 实际业务处理 Kafka 消息丢失、重复消费和顺序消费的问题
关于 Kafka 消息丢失.重复消费和顺序消费的问题 消息丢失,消息重复消费,消息顺序消费等问题是我们使用 MQ 时不得不考虑的一个问题,下面我结合实际的业务来和你分享一下解决方案. 消息丢失问题 比 ...
- Kafka消息系统基础知识索引
一些观念的修正 从 0.9 版本开始,Kafka 的标语已经从“一个高吞吐量,分布式的消息系统”改为"一个分布式流平台". Kafka不仅仅是一个队列,而且是一个存储,有超强的堆积 ...
- 一文看懂Kafka消息格式的演变
摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在不断的升级改进,从0.8.x版本开始到现在的1.1.x版本,Kaf ...
- 转载来自朱小厮博客的 一文看懂Kafka消息格式的演变
转载来自朱小厮博客的 一文看懂Kafka消息格式的演变 ✎摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在 ...
- 爱奇艺直播 - 春晚直播业务API架构
小结: 1.服务熔断策略 在网关服务中经常会对后端不同api接口做服务聚合,比如A服务 -> B服务 -> C服务 ,如果C服务出现问题,那么在调用C服务之前需要做熔断.而在设计熔断器的时 ...
- 【转】解决Maxwell发送Kafka消息数据倾斜问题
最近用Maxwell解析MySQL的Binlog,发送到Kafka进行处理,测试的时候发现一个问题,就是Kafka的Offset严重倾斜,三个partition,其中一个的offset已经快200万了 ...
随机推荐
- 开源企业IM-免费企业即时通讯-ENTBOOST V2014.180 Windows版本号正式公布
ENTBOOST,VERSION 2014.180 Linux版本号公布,主要添加企业IM应用集成功能,完好安卓SDK功能及部分BUG修正. 下一版本号公布时间.7月15日.敬请关注. ENTBOOS ...
- IOS开发之UIScrollVIew运用
UIScrollView可以实现在一个界面看到所有内容,同时也不需要担心所显示的内容超出屏幕的大小,当超出之后可以翻阅至下一页浏览. #pragma mark - UIScrollViewDelega ...
- 用express-generator创建express项目骨架
npm install express-generator -g express -e --view=ejs myproject && cd myproject npm install ...
- Linux/CentOS关闭图形界面(X-window)和启用图形界面命令
1.在图像界面关闭x window:1.1 shell中运行 init 3 进入文本模式,同时会关闭相关的服务(Xserver 肯定关闭)1.2 Alt+Ctrl+F1~F6到字符界面,root登陆 ...
- [Windows Azure] Enabling Diagnostics in Windows Azure
Enabling Diagnostics in Windows Azure Windows Azure Diagnostics enables you to collect diagnostic da ...
- 【Java工具方法】给集合按数量分组
有时候需要给集合(如List)按数量分组,比如全集太大时,需要分批处理:或效率有点低,分批并发处理.于是,写了个将List按数量分组的方法. package controller; import ja ...
- delphi中Webbrowser疑难问题集锦<转>
1.获得网页中变量值 htm中<script> var currID=123</script> 程序中可以这么调用 id := Form1.WebBrows ...
- js判断网页是真静态还是伪静态的方法
现在很多网站都是使用以“.html“为扩展名的网页,这样做的好处是有利于搜索引擎收录和排名,或者是其他目的,如可以缩短网址使人容易记住.不过有意思的是并不是所有的以“.html”扩展名的网页都是静态的 ...
- animate.css源码
/*! 动画属性: animation-name:动画名称 animation-duration:动画时间 animation-timing-function:动画的速度曲线 animation-de ...
- C# 裁剪图片
/// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath"& ...