对中国开发者最具吸引力的科技企业有哪些?快来为你 pick 的企业投票! 了解详情
写点什么

使用 Kafka 处理高并发数据流

2014 年 11 月 25 日

如果我们需要持续地处理大约 20 万条 / 秒的消息量,同时还需要保证数据的可用性和冗余,我们应该怎么做呢?最近 Tadas Vilkeliskis 在自己的博客上发表了一篇题为《数据流基础设施》的文章,分享了他们是如何应对这种场景的。

Tadas Vilkeliskis 在文章中提到,他们每秒钟大约会收到来自于世界各地的 20 万次 HTTP 请求,这些请求包含了用户的行为信息,平均每一条消息的大小约为 0.8KB,每秒钟的总数量在 150MB 左右。为了应对如此高的流量,Tadas Vilkeliskis 说他们的方案是 Kafka :将这些 HTTP 请求当成一个事件流,先把接收到的所有请求都推动到 Kafka 消息队列中,然后再依次进行处理。其中,事件流中的所有请求都可以包含一些会随时间变化的信息,而 Kafka 消息队列的作用则是保证请求的顺序以及数据的持久化和复制。

之所以会选择 Kafka,Tadas Vilkeliskis 认为:

“RabbitMQ 和 ZeroMQ 这样的消息系统要么没有如此高的写能力,要么需要牺牲持久性以便获得更好的写性能。数据库也有类似的限制,它们通常都针对特定场景做了优化,但是这样在其他的场景下就难有良好的表现。”

Tadas Vilkeliskis 的话可能比较模糊,对于 Kafka 与其他的消息队列系统之间的比较,InfoQ 之前也曾发布过一篇文章《 Apache Kafka:下一代分布式消息系统》,其中就从生产和消费两个方面对 Kafka、Apache ActiveMQ V5.4 和 RabbitMQ V2.4 的性能做了比较,结果是 Kafka 遥遥领先,或许这才是支撑 Tadas Vilkeliskis 使用 Kafka 的原因。

另外,Tadas Vilkeliskis 还在这篇文章中分享了 Kafka 的数据分发机制,磁盘存储空间的分配、消息格式的处理、服务器选择以及数据压缩等方面的内容,感兴趣的读者可以阅读英文原文

对于 Tadas Vilkeliskis 分享的方案,也有部分用户提出了自己的想法,Ryan 回复说:

“这些都是不错的性能数据。在 VoltDB ,我们发现有很多人在应对这种速度时会把数据从 Kafka 转移到 VoltDB 上。VoltDB 能够处理这种速率的流量,同时能够使用内置的输出特性将其推动到下游系统。它可以在 Kafka 和最终的仓库磁盘之间增加实时的数据抽取、转换、加载、过滤、决策和分析的阶段。”

Tristan Turêves 回复说:

“这是为了处理实时竞价(RTB)么?我也做了相似的事情,但是使用了完全不同的技术。我们的架构是基于 NodeJS 的,这种情况下我们清楚地知道请求来源于哪个地理位置。我们租用了高性能的专用服务器(最少 8 核,有充足的 RAM),有一个本地 node 集群监听“内核数量”的端口。然后在这之上有一个 HAProxy 负责同一台机器端口间的负载均衡。在保持平均响应时间为 1 秒的情况下,我们的每一台主机每秒钟大约能够处理 14 万次请求。这是一个非常酷的项目,所有的事情都优化到了极致,同是我们还使用 ElasticSearch Kibana 实现了实时的分析和图形化。”


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 11 月 25 日 07:458275
用户头像

发布了 321 篇内容, 共 103.4 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

区块链交易所开发搭建源码,数字货币交易系统

135深圳3055源中瑞8032

合约智能一键跟单系统开发,API合约跟单软件

135深圳3055源中瑞8032

MySQL-技术专题-MySQL中的锁机制

李浩宇/Alex

金秋十月游记

Xuhehui

美食 旅行

十一、给小白看的最后一篇Python基础教程

刘润森

Python

塞上江南之旅

谋生亦谋爱

美食 旅行

个人精简xml,实现mybatis存取blob类型数据(Mysql)

小Q

Java MySQL 学习 面试 mybatis

你掉进过“伪敏捷”的陷阱吗?

华为云开发者社区

项目管理 软件 敏捷

一个你不得不重视的趋势,而且数据会让你很诧异

非著名程序员

个人成长 短视频 自媒体

MySQL-技术专题-MySQL MVCC实现机制

李浩宇/Alex

十二、深入Python列表和元组

刘润森

Python

Vidyo整个产品架构是怎样的?

dwqcmo

音视频会议 集成架构 解决方案 智能硬件

大型互联网应用系统的技术方案和手段

饺子

USDT支付系统开发解决方案服务商,承兑商支付

135深圳3055源中瑞8032

亿级数据库毫秒级查询?看完这一篇,海量数据赋能你也行

京东科技开发者

MySQL 数据库

Go语言小规范

小高

拯救深度学习:标注数据不足下的深度学习方法

华为云开发者社区

学习 AI 训练

中年架构师,悲催的一天,全靠忍!

四猿外

Java 程序员 程序人生 架构师

LeetCode题解:589. N叉树的前序遍历,栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

LeetCode题解:590. N叉树的后序遍历,栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

【人人都懂密码学】一篇最易懂的Java密码学入门教程

华为云开发者社区

加密 密码

阿里内部绝密《百亿级并发系统设计》实战教程,冒着被劝退的风险免费分享

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

区块链钱包系统开发,多币钱包app源码搭建

135深圳3055源中瑞8032

Presto在滴滴的探索与实践

滴滴技术

开源项目 滴滴技术 滴滴开源 presto

MySQL-技术专题-主从复制原理

李浩宇/Alex

阿里P8架构师得意弟子,应聘华为Java岗居然一面就失败了?

Java架构师迁哥

重磅推荐!阿里巴巴技术专家认证的Java系统性能圣经,太香了

996小迁

Java 架构 面试 Java系统性能

上线GitHub七天后就标星87.6K的Java大牛成长宝典,啃完之后成功面进字节!

Java架构追梦

Java 学习 架构 面试 核心知识点

2020亚马逊全球Prime会员日为会员节省金额超过14亿美金

爱极客侠

浅析 Golang 垃圾回收机制

郭旭东

go golang

MySQL-技术专题-SQL优化系列

李浩宇/Alex

滴滴 Logi 日志管理与分析平台

滴滴 Logi 日志管理与分析平台

使用Kafka处理高并发数据流-InfoQ