转自: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

灾难模拟

 

  1. 消息发送过程中宕掉其中一个节点,或同时宕掉两个节点(最多同时宕2台,因为副本数为3)

  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消息的可靠性测试--针对直播业务的方案选择的更多相关文章

  1. kafka消息的可靠性

    本文来自网易云社区 作者:田宏增 Kafka的高可靠性的保障来源于其健壮的副本(replication)策略.通过调节其副本相关参数,可以使得Kafka在性能和可靠性之间运转的游刃有余.Kafka从0 ...

  2. Kafka消息delivery可靠性保证(Message Delivery Semantics)

    原文见:http://kafka.apache.org/documentation.html#semantics kafka在生产者和消费者之间的传输是如何保证的,我们可以知道有这么几种可能提供的de ...

  3. 如何保证kafka消息不丢失

    背景 这里的kafka值得是broker,broker消息丢失的边界需要对齐一下: 1 已经提交的消息 2 有限度的持久化 如果消息没提交成功,并不是broke丢失了消息: 有限度的持久化(broke ...

  4. 实际业务处理 Kafka 消息丢失、重复消费和顺序消费的问题

    关于 Kafka 消息丢失.重复消费和顺序消费的问题 消息丢失,消息重复消费,消息顺序消费等问题是我们使用 MQ 时不得不考虑的一个问题,下面我结合实际的业务来和你分享一下解决方案. 消息丢失问题 比 ...

  5. Kafka消息系统基础知识索引

    一些观念的修正 从 0.9 版本开始,Kafka 的标语已经从“一个高吞吐量,分布式的消息系统”改为"一个分布式流平台". Kafka不仅仅是一个队列,而且是一个存储,有超强的堆积 ...

  6. 一文看懂Kafka消息格式的演变

    摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在不断的升级改进,从0.8.x版本开始到现在的1.1.x版本,Kaf ...

  7. 转载来自朱小厮博客的 一文看懂Kafka消息格式的演变

    转载来自朱小厮博客的 一文看懂Kafka消息格式的演变     ✎摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在 ...

  8. 爱奇艺直播 - 春晚直播业务API架构

    小结: 1.服务熔断策略 在网关服务中经常会对后端不同api接口做服务聚合,比如A服务 -> B服务 -> C服务 ,如果C服务出现问题,那么在调用C服务之前需要做熔断.而在设计熔断器的时 ...

  9. 【转】解决Maxwell发送Kafka消息数据倾斜问题

    最近用Maxwell解析MySQL的Binlog,发送到Kafka进行处理,测试的时候发现一个问题,就是Kafka的Offset严重倾斜,三个partition,其中一个的offset已经快200万了 ...

随机推荐

  1. iOS缓存-内存缓存

    为了减少与服务器的连接沟通次数,提高应用程序的执行速度,使用了iOS的缓存机制 #import "YoungViewController.h" @interface YoungVi ...

  2. 自己定义转场动画--Swift3.0版本号

    转场动画这事.说简单也简单.能够通过presentViewController:animated:completion:和dismissViewControllerAnimated:completio ...

  3. Word实用教程——五分钟教你如何在任意页开始添加页码

    最近在写一篇论文,但是在排版上遇到一点小问题,就是要加入页码,而且页码是从目录的下一页开始计数,于是我就在网上找如何在任意页添加页码.后来辗转终于搞定,真心觉得这一个小功能让微软做的如此的麻烦,真是活 ...

  4. 菜鸟学JS(三)——自动隐藏的悬浮框

    今天写一个小实例,用js和css写一个可以自动隐藏的悬浮框.css肯定是用来控制样式的,js用来控制器显示与隐藏的.显示与隐藏通常有两种方法实现:1,用js控制其显示属性:2,用js控制其大小. 今天 ...

  5. 【小白的CFD之旅】24 稳态和瞬态

    小白最近在练习案例的时候,对稳态和瞬态的问题,产生了一些疑问.譬如说,为什么有的案例用稳态,而有的案例用瞬态?有时候相同的案例既可以用稳态也可以用瞬态,而有的案例却只能用瞬态计算?小白决定找小牛师兄问 ...

  6. lua -- 字体闪烁

    -- 这里是实现控件的闪烁,不能将一个局部的动作变量,赋给两个控件来动作,只能一个控件对应一个动作 function UIBagController:ShowEffect( ) local tGood ...

  7. jar依赖

    https://blog.csdn.net/honghailiang888/article/details/53019635

  8. [SQL in Azure] Provisioning a SQL Server Virtual Machine on Azure

    http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-provision-sql-server/ Provi ...

  9. [Windows Azure] How to Monitor Cloud Services

    How to Monitor Cloud Services To use this feature and other new Windows Azure capabilities, sign up ...

  10. python(46):对字典进行排序,多键值排序

    注:改于2017-12-07,python3 下 Removed dict.iteritems(), dict.iterkeys(), and dict.itervalues(). Instead: ...