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

    public static class TaskAsyncHelper { /// <summary> /// 将一个方法function异步运行,在执行完毕时执行回调callback / ...

  2. MinGW环境libssh2安装

    由于实习工作中要用到基于sftp协议开发一个网络程序,同时要实现运行在Windows平台上,找来找去就这个libssh2库好用,在网络上算是有那么一点点的文档可以看.这个库还不是现成的,还要进行源代码 ...

  3. c++并行计算库TBB和PPL的基本用法

    并行库充分利用多核的优势,通过并行运算提高程序效率,本文主要介绍c++中两个知名的并行库,一个是intel开发的TBB,一个是微软开发的PPL.本文只介绍其基本的常用用法:并行算法和任务. TBB(I ...

  4. 一次tomcat配置参数调优Jmeter压力测试记录前后对比

    使用的tomcat版本为:apache-tomcat-7.0.53 使用测试工具Jmeter版本为:apache-jmeter-2.12 1.测试前tomat的"server.xml&quo ...

  5. Swiper.js的腾讯新闻演示

    演示效果地址:https://www.swiper.com.cn/demo/indexsample/: 代码: <!DOCTYPE html> <html> <head& ...

  6. sql server 与oracle 中字段类型的对应

    SqlServer 2k转换为Oracle 10g 列名 SqlServer数据类型 SqlServer长度 Oracle数据类型 column1 ) column2 ) column3 ) colu ...

  7. SQL Server 2008 R2升级到SQL Server 2012 SP1

    1.建议对生产环境对的数据库升级之前做好备份,以防不测. 2.从SQL Server 2008 R2 升级到SQL Server 2012 SP1,需要先安装SQL Server 2008 R2 的S ...

  8. Zabbix监控数据库连通性所遇问题

    Zabbix配合db2bp监控DB2数据库能否远程连接问题分析: 所遇问题,有时监控一直获取不到数据,原因是connect to连接超时了,zabbix默认监控脚本获取数据时间是3s,但最多支持30s ...

  9. 如何通过Fiddler模拟弱网进行测试

    [本文出自天外归云的博客园] 弱网测试的目的 弱网测试可以发现一些因为网络问题导致的交互问题,从而更好的完善应用的性能. 弱网的模拟 通过Fiddler可以模拟弱网进行测试,拿手机测试举例,进行手机a ...

  10. WriteableBitmap/BitmapImage/MemoryStream/byte[]相互转换

    1 WriteableBitmap/BitmapImage/MemoryStream/byte[]相互转换 2012-12-18 17:27:04|  分类: Windows Phone 8|字号 订 ...