加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

每天处理千亿级日志量,Kafka是如何做到的?

发布时间:2019-12-26 15:56:31 所属栏目:Windows 来源:站长网
导读:副标题#e# 之前为大家分享了不少 Kafka 原理解析类的干货,今天咱们一起来看看 360 基于 Kafka 千亿级数据量的深度实践! 图片来自 Pexels 本文主要围绕如下内容分享: 消息队列选型 Kafka 在 360 商业化的现状 Kafka Client 框架 数据高可用 负载均衡 鉴权
副标题[/!--empirenews.page--]

之前为大家分享了不少 Kafka 原理解析类的干货,今天咱们一起来看看 360 基于 Kafka 千亿级数据量的深度实践!

每天处理千亿级日志量,Kafka是如何做到的?

图片来自 Pexels

本文主要围绕如下内容分享:

消息队列选型

Kafka 在 360 商业化的现状

Kafka Client 框架

数据高可用

负载均衡

鉴权、授权与 ACL 方案

Quota 机制

跨 IDC 的数据同步

监控告警

线上问题及解决方案

消息队列选型

当时主要考虑以下几个维度:

社区活跃度

客户端支持

吞吐量

对比几个系统下来,觉得 Kafka 比较符合我们的要求。现在有一个新的开源系统 Pulsar,我觉得也可以尝试一下。

每天处理千亿级日志量,Kafka是如何做到的?

Kafka 设计上的亮点如下:

每天处理千亿级日志量,Kafka是如何做到的?

Kafka 性能和吞吐都很高,通过 Sendfile 和 Pagecache 来实现 Zero Copy 机制,顺序读写的特性使得用普通磁盘就可以做到很大的吞吐,相对来说性价比比较高。

Kafka 通过 Replica 和 ISR 机制来保证数据的高可用。

Kafka 集群有两个管理角色:

Controller 主要是做集群的管理。

Coordinator 主要做业务级别的管理。

这两种角色都由 Kafka 里面的某个 Broker 来担任,这样 Failover 就很简单,只需要选一个 Broker 来替代即可。

从这个角度来说 Kafka 有一个去中心化的设计思想在里面, 但 Controller 本身也是一个瓶颈,可以类比于 Hadoop 的 Namenode。

CAP 理论相信大家都有了解过,分布式系统实现要么是 CP,要么是 AP。

Kafka 实现比较灵活,不同业务可以根据自身业务特点来对 Topic 级别做偏 CP 或偏 AP 的配置。

支持业务间独立重复消费,并且可以做回放。

每天处理千亿级日志量,Kafka是如何做到的?

这个是 Kafka 的简要架构,主要分为:

生产端

Broker 端

消费端

日志有三个层次:

第一个层次 Topic

第二个层次 Partition(每个 Partition 是一个并行度)

第三个层次 Replica(Replica 表示 Partition 的副本数)

Kafka 在 360 商业化的现状

每天处理千亿级日志量,Kafka是如何做到的?

目前集群有千亿级数据量,100 多台万兆机器,单 Topic 的最大峰值 60 万 QPS,集群的峰值大概在 500 万 QPS。

每天处理千亿级日志量,Kafka是如何做到的?

我们的物理机配置 24Core/10G 网卡/128G 内存/4T*12 HDD,值得说一下的是我们采用了万兆网卡加普通磁盘 4T*12 的配置,测下来磁盘吞吐和网络吞吐是能够匹配上的。

再者考虑到我们的数据量比较大,SSD 盘没有特别大的且成本比较高。

磁盘的组织结构我们用的是 JBOD,RAID10 也是很好的方案(磁盘成本会翻倍)。

我们目前的 Kafka 版本是 1.1.1,推荐大家部署 0.11 以上的版本会好一些,这个版本对协议做了很多优化,对于后续的 2.x 版本都是兼容的。

每天处理千亿级日志量,Kafka是如何做到的?

这个是我们 Kafka 上下游相关的组件,生产端主要是各种 Kafka Clients/实时服务/Flume/Logstash。

消费端分为实时,离线(ETL),监控三部分。实时有 Spark/Flink/Storm 等主流框架, 离线部分我们基于 Flink 自研了一个统一落地框架 Hamal,从 Kafka 消费一遍数据就可以落地到多个下游系统(HDFS、Hbase、Redis等),可以避免重复消费。

还有部分是监控的需求,我们把 ES/InfluxDB 相关的日志打到 Kafka,然后再消费出来通过 Grafana 展示,但目前我们已经切到 Prometheus 上了。

Kafka Client 框架

为什么要做这个框架呢?之前有很多的业务部门用裸 API 自己去实现 Kafka Client 的逻辑。

但是会有很多问题,有一些异常情况会 Catch 不全,我们做这个框架是想把所有的细节屏蔽掉,然后暴露出足够简单的接口。

这样可以减少业务犯错的可能性,我们要确保极端的情况下比如网络或集群异常时的可用性,如果网络或集群不可用,数据会先落到本地,等恢复的时候再从本地磁盘恢复到 Kafka 中。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读