大数据时代:Kafka如何做到1秒发布百万条消息

说起Kafka的第一个突出特定就是“快”,而且是那种变态的“快”。据最新的数据:每天利用Kafka处理的消息超过1万亿条,在峰值时每秒钟会发布超过百万条消息,就算是在内存和CPU都不高的情况下,Kafka的速度最高可以达到每秒十万条数据,并且还能持久化存储。那么,Kafka是如何做到的呢?

Kafka简介

Kafka是一种分布式的,基于发布/订阅的消息系统。原本开发自LinkedIn,用作 LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。之后成为Apache项目的一部分,主要用于处理活跃的流式数据。

kafka有如下特性:

1、通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能;

2、高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息;

3、支持通过kafka服务器和消费机集群来分区消息;

4、支持Hadoop并行数据加载。

Kafka 架构

Kafka的整体架构非常简单,是显式分布式架构,producer、broker(kafka)和consumer都可以有多个。Producer,consumer实现Kafka注册的接口,数据从 producer发送到broker,broker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumer。broker的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。

kafka相关名词解释如下:

1、producer:消息生产者,发布消息到kafka集群的终端或服务。

2、broker:kafka集群中包含的服务器。

3、topic:每条发布到kafka集群的消息属于的类别,即kafka是面向topic的。

4、partition:partition是物理上的概念,每个topic包含一个或多个partition,kafka分配的单位是partition。

5、consumer:从kafka集群中消费消息的终端或服务。

6、Consumer group:high-level consumer API中,每个consumer都属于一个consumer group,每条消息只能被consumer group的一个Consumer消费,但可以被多个consumer group消费。

7、replica:partition的副本,保障partition的高可用。

8、leader:replica中的一个角色, producer和consumer只跟leader交互。

9、follower:replica中的一个角色,从leader中复制数据。

10、controller:kafka集群中的其中一个服务器,用来进行leader election以及各种failover。

11、zookeeper:kafka通过zookeeper来存储集群的meta信息。

Kafka有四个核心的API。客户端和服务器端的通信,是基于简单,高性能,且与编程语言无关的TCP协议。

因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证)。Kafka集群分区日志如下所示:

每个分区是一个有序的,不可变的记录序列,不断附加到结构化的提交日志中。每个分区中的记录都被分配一个顺序的id号,称为唯一标识分区中每个记录的偏移量。

Kafka 应用场景

消息队列

比起大多数的消息系统来说,Kafka有更好的吞吐量,内置的分区,冗余及容错性,这让Kafka成为了一个很好的大规模消息处理应用的解决方案。

消息系统一般吞吐量相对较低,但是需要更小的端到端延时,并尝尝依赖于Kafka提供的强大的持久性保障。在这个领域,Kafka足以媲美传统消息系统,如ActiveMR或RabbitMQ。

行为跟踪

Kafka的另一个应用场景是跟踪用户浏览页面、搜索及其他行为,以发布-订阅的模式实时记录到对应的Topic里。那么这些结果被订阅者拿到后,就可以做进一步的实时处理,或实时监控,或放到hadoop离线数据仓库里处理。

元信息监控

作为操作记录的监控模块来使用,即汇集记录一些操作信息,可以理解为运维性质的数据监控吧。

日志收集

日志收集方面,其实开源产品有很多,包括Scribe、Apache Flume。很多人使用Kafka代替日志聚合(log aggregation)。

日志聚合一般来说是从服务器上收集日志文件,然后放到一个集中的位置(文件服务器或HDFS)进行处理。然而Kafka忽略掉文件的细节,将其更清晰地抽象成一个个日志或事件的消息流。

这就让Kafka处理过程延迟更低,更容易支持多数据源和分布式数据处理。比起以日志为中心的系统比如Scribe或者Flume来说,Kafka提供同样高效的性能和因为复制导致的更高的耐用性保证,以及更低的端到端延迟。

流处理

这个场景可能比较多,也很好理解。保存收集流数据,以提供之后对接的Storm或其他流式计算框架进行处理。很多用户会将那些从原始Topic来的数据进行阶段性处理,汇总,扩充或者以其他的方式转换到新的Topic下再继续后面的处理。

例如一个文章推荐的处理流程,可能是先从RSS数据源中抓取文章的内容,然后将其丢入一个叫做“文章”的topic中;后续操作可能是需要对这个内容进行清理,比如回复正常数据或者删除重复数据,最后再将内容匹配的结果返还给用户。

这就在一个独立的Topic之外,产生了一系列的实时数据处理的流程。Strom和Samza是非常著名的实现这种类型数据转换的框架。

事件源

事件源是一种应用程序设计的方式,该方式的状态转移被记录为按时间顺序排序的记录序列。Kafka可以存储大量的日志数据,这使得它成为一个对这种方式的应用来说绝佳的后台。比如动态汇总(News feed)。

持久性日志(commit log)

Kafka可以为一种外部的持久性日志的分布式系统提供服务。这种日志可以在节点间备份数据,并为故障节点数据回复提供一种重新同步的机制。Kafka中日志压缩功能为这种用法提供了条件。在这种用法中,Kafka类似于Apache BookKeeper项目。

关注公众账号

飞马会

往期福利关注飞马会公众号,回复对应关键词打包下载学习资料;回复“入群”,加入飞马网AI、大数据、项目经理学习群,和优秀的人一起成长!

微软大牛人工智能系列课

(扫码试听或订阅)

m.qlchat.com/live/channe… (二维码自动识别)

回复 数字“1”下载从入门到研究,人工智能领域最值得一读的10本资料(附下载)

回复 数字“2”机器学习 & 数据科学必读的经典书籍,内附资料包!

回复 数字“3”走进AI & ML:从基本的统计学到机器学习书单(附PDF下载)

回复 数字“4”了解人工智能,30份书单不容错过(附电子版PDF下载)

回复 数字“6”AI人工智能:54份行业重磅报告汇总(附下载)

回复 数字“7”TensorFlow介绍、安装教程、图像识别应用(附安装包/指南)

回复 数字“10”麦肯锡160页报告:2030年全球将可能8亿人要被机器抢饭碗

回复 数字“12”小白| Python+Matlab+机器学习+深度神经网络+理论+实践+视频+课件+源码,附下载!

回复 数字“14”小白| 机器学习和深度学习必读书籍+机器学习实战视频/PPT+大数据分析书籍推荐!

回复 数字“16”100G Python从入门到精通!自学必备全套视频教程+python经典书籍!

回复 数字“17”【干货】31篇关于深度学习必读论文汇总(附论文下载地址)

回复 数字“18”526份行业报告+白皮书:AI人工智能、机器人、智能出行、智能家居、物联网、VR/AR、 区块链等(附下载)

回复 数字“19”800G人工智能学习资料:AI电子书+Python语言入门+教程+机器学习等限时免费领取!

回复 数字“20”17张思维导图,一网打尽机器学习统计基础(附下载)

回复 数字“22”吴恩达新书,教你构建机器学习项目:《Machine Learning Yearning》

回复 数字“23”机器学习:怎样才能做到从入门到不放弃?(内含福利)

回复 数字“24”限时下载 | 132G编程资料:Python、JAVA、C,C++、机器人编程、PLC,入门到精通~

回复 数字“25”限资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段!

回复 数字“26”人工智能入门书单推荐,学习AI的请收藏好(附PDF下载)

回复 数字“27”资源 | 吴恩达斯坦福CS230深度学习课程全套资料放出(附下载)

回复 数字“28”懂这个技术的程序员被BAT疯抢...(内含资料包)

回复 数字“29”干货 | 28本大数据/数据分析/数据挖掘电子书合集免费下载!

猜你喜欢

转载自www.cnblogs.com/fmi-AI/p/9389803.html