`

Kafka背景及架构介绍

 
阅读更多
Kafka剖析(一):
Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。InfoQ一直在紧密关注Kafka的应用以及发展,“Kafka剖析”专栏将会从架构设计、实现、应用场景、性能等方面深度解析Kafka。

背景介绍

Kafka创建背景

Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。现在它已被多家不同类型的公司 作为多种类型的数据管道和消息系统使用。

活动流数据是几乎所有站点在对其网站使用情况做报表时都要用到的数据中最常规的部分。活动数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索情况等内容。这种数据通常的处理方式是先把各种活动以日志的形式写入某种文件,然后周期性地对这些文件进行统计分析。运营数据指的是服务器的性能数据(CPU、IO使用率、请求时间、服务日志等等数据)。运营数据的统计方法种类繁多。

相关厂商内容

滴滴出行iOS客户端架构演进之路! 微信客户端如何应对弱网络! 函数式编程中的Swift与Swift中的函数式编程! AWS Webinar 5月24日在线课堂|利用AWS Lambda创建应用 除了语音识别和大数据分析之外,MyCar和CoDriver还有更多核心技术
相关赞助商


GMTC全球移动技术大会2016年6月24日-25日,北京,点击了解详情!

近年来,活动和运营数据处理已经成为了网站软件产品特性中一个至关重要的组成部分,这就需要一套稍微更加复杂的基础设施对其提供支持。

Kafka简介

Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:

以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。
支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展。
为何使用消息系统

解耦
在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

冗余
有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。

扩展性
因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。

灵活性 & 峰值处理能力
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见;如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

可恢复性
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

顺序保证
在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个Partition内的消息的有序性。

缓冲
在任何重要的系统中,都会有需要不同的处理时间的元素。例如,加载一张图片比应用过滤器花费更少的时间。消息队列通过一个缓冲层来帮助任务最高效率的执行———写入队列的处理会尽可能的快速。该缓冲有助于控制和优化数据流经过系统的速度。

异步通信
很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

常用Message Queue对比

RabbitMQ

RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。

Redis

Redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃。虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。

ZeroMQ

ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZeroMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演这个服务器角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就是说如果宕机,数据将会丢失。其中,Twitter的Storm 0.9.0以前的版本中默认使用ZeroMQ作为数据流的传输(Storm从0.9版本开始同时支持ZeroMQ和Netty作为传输模块)。

ActiveMQ

ActiveMQ是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。

Kafka/Jafka

Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制统一了在线和离线的消息处理。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。

Kafka架构

Terminology

Broker
Kafka集群包含一个或多个服务器,这种服务器被称为broker

Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

Partition
Parition是物理上的概念,每个Topic包含一个或多个Partition.

Producer
负责发布消息到Kafka broker

Consumer
消息消费者,向Kafka broker读取消息的客户端。

Consumer Group
每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

转自:http://www.infoq.com/cn/articles/kafka-analysis-part-1?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

http://www.csdn.net/article/2014-12-09/2823038?from=singlemessage&isappinstalled=0
分享到:
评论

相关推荐

    Kafka剖析:Kafka背景及架构介绍PDF

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而...InfoQ一直在紧密关注Kafka的应用以及发展,“Kafka剖析”专栏将会从架构设计、实现、应用场景、性能等方面深度解析Kafka。

    Kafka设计解析(一)-Kafka背景及架构介绍

    并介绍了Kafka的架构,Producer消息路由,ConsumerGroup以及由其实现的不同消息分发方式,Topic&Partition,最后介绍了KafkaConsumer为何使用pull模式以及Kafka提供的三种deliveryguarantee。Kafka是一个消息系统,...

    Kafka设计解析-郭俊

    Kafka剖析(一):Kafka背景及架构介绍 Kafka设计解析(二):Kafka High Availability (上) Kafka设计解析(三):Kafka High Availability (下) Kafka设计解析(四):Kafka Consumer解析

    Kafka高性能架构之道

    如《Kafka设计解析(一)-Kafka背景及架构介绍》一文所述,Topic只是一个逻辑的概念。每个Topic都包含一个或多个Partition,不同Partition可位于不同节点。同时Partition在物理上对应一个本地文件夹,每个Partition...

    kafka课件.rar

    描述中提到“kafka框架原理及使用介绍”,意味着内容可能涵盖以下几个关键知识点: 1. **Kafka基本概念**:包括主题(Topic)、分区(Partition)、副本(Replica)、生产者(Producer)、消费者(Consumer)等核心...

    KafkaExactlyOnce语义与事务机制原理

    有状态操作的可恢复性《Kafka背景及架构介绍》一文中有说明Kafka在0.11.0.0之前的版本中只支持AtLeastOnce和AtMostOnce语义,尚不支持ExactlyOnce语义。但是在很多要求严格的场景下,如使用Kafka处理交易数据,...

    linux环境下kafka配置文档及安装包

    在大数据部署的背景下,Kafka通常与其他组件一起使用,如HDFS(Hadoop Distributed File System)用于持久化数据,Spark或Flink用于实时处理,以及Elasticsearch或HBase进行数据分析和检索。通过合理的架构设计,...

    依据kafka做的日志收集设计

    通过这些知识点的深入探讨,我们可以全面理解Kafka如何在LinkedIn的应用背景中被设计和实施为一个高效、稳定的数据日志收集系统,以及它如何通过其分布式提交日志架构支持各种分布式数据驱动系统,并对整个行业产生...

    kafka深度分析

    ### Kafka深度分析 #### 1. 背景介绍 ##### 1.1 Kafka简介 Kafka是一款由LinkedIn公司开发并开源的分布式...通过对Kafka背景、优势、架构以及关键技术细节的深入了解,可以帮助开发者更好地利用Kafka解决实际问题。

    Kafka模拟网页浏览实时统计

    1. **数据模型**:定义网页浏览事件的数据结构,可能包含用户ID、页面URL、时间戳等字段。 2. **数据处理**:创建Kafka消费者,订阅存储网页浏览事件的主题。每当收到新的事件,就进行实时统计,例如计算每分钟的...

    Kafka & Mafka技术分享及讨论

    ### Kafka & Mafka 技术分享及讨论 #### Kafka 设计关键点 **背景与动机:** Kafka 的设计初衷是为了应对互联网应用中产生的大量日志数据(如访问日志、用户行为数据如投票和评分等)的高效处理需求。在传统消息...

    高清彩版 Kafka_Streams_in_Action

    - **欢迎来到Kafka Streams**:这一章节介绍了Kafka Streams的基本概念和发展背景,适合初学者快速了解该技术。 - **快速上手Kafka**:这部分重点讲解了Kafka的核心组件及其工作原理,为后续学习打下坚实基础。 2...

    kafka研究和文档阵整理

    - **依赖ZooKeeper**:虽然Kafka可以独立运行,但在生产环境中通常与ZooKeeper配合使用来实现动态配置管理及故障恢复。 - **数据持久化**:Kafka将消息存储在磁盘上,并通过分区(Partition)来实现水平扩展。 - **...

    kafka自动化管理与分布式状态系统导论

    在实际的部署中,已经针对Kafka集群的特定问题进行了深入研究和解决方案开发,例如在LinkedIn背景下,对Cruise Control的使用和定制,以及各种在实践中遇到的挑战和解决方案的实现。因此,整个演讲不仅涉及Kafka的...

    kafkatool_64bit.rar

    Kafka以高吞吐量、低延迟和可持久化为特点,使得它成为现代大数据架构中的关键组件。然而,对于大型复杂的Kafka集群,管理和监控往往是一项挑战,这就凸显了KafkaTool的重要性。 KafkaTool的主要功能包括: 1. **...

Global site tag (gtag.js) - Google Analytics