抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

使用 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:458438
用户头像

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

关注

评论

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

「架构师训练营第 1 期」-食堂卡管理系统

睡不着摇一摇

极客大学架构师训练营

区块链将掀开人类的伟大时代

CECBC区块链专委会

区块链 智能合约 价值物联网

用简单而又专业的角度为大家揭秘区块链和比特币

CECBC区块链专委会

比特币 区块链 数字货币

Nacos如何实现服务自动注册

编号94530

spring nacos 源码阅读 spring cloud alibaba

LeetCode题解:94. 二叉树的中序遍历,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

Spring Cloud 微服务实践 (3) - 服务间的调用

xiaoboey

Spring Cloud 熔断 服务调用 Feign

架构师训练营第 1 期 - 作业提交

Todd-Lee

极客大学架构师训练营

训练营第一周作业1

仲夏

Spring事件执行流程源码分析

编号94530

spring Spring Cloud 源码阅读 事件监听

架构师训练营大作业二

Hanson

极客大学--架构师训练营1期-第一周总结(vaik)

行之

我们需要软件工艺

Bruce Talk

敏捷 随笔 Agile

架构师训练营第 1 期-第一周周总结

郑凯元

极客大学架构师训练营

架构师训练营第一期第一周命题作业

朱磊

极客大学架构师训练营

只要我跑的够快,内卷它就卷不到我,一名高中生是如何做到在疫情下涨薪70%的?

程序员DMZ

面试 程序人生

架构师训练营大作业一同城快递

Hanson

架构方法--课后练习

Nick~毓

极客时间架构师培训1期-第1周作业

Kaven

训练营第一周作业 2

仲夏

go runtime debug 小技巧

Gopher指北

golang debug 后端 runtime

食堂就餐卡系统设计

……

架构师训练营第一周

子青

架构师训练营第一周作业

木头发芽

项目滞后,如何让自己的技术快速成长

郎哲158

个人成长 舒适区 熟练工

架构师训练营第一周作业 (就餐卡UML图)

springH₂O

week1-UML图

张兵

极客大学架构师训练营

中国法定数字货币发展新机遇

CECBC区块链专委会

数字货币 数字经济

第一周作业一:食堂就餐卡系统设计

登顶计划

极客大学架构师训练营

电商管理系统之交易子系统设计(一)

长沙造纸农

系统设计 产品经理 系统架构 订单管理 电商平台

RxSwift和RxCocoa入门

teoking

ios swift

第1周 架构方法 浮皮潦草之总结

Pyr0man1ac

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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