1、 概述
Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据。活跃的流式数据在web网站应用中非常常见,这些数据 包括网站的pv、用户访问了什么内容,搜索了什么内容等。 这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。
传统的日志分析系统提供了一种离线处理日志信息的可扩展方案,但若要进行实时处理,通常会有较大延迟。而现有的消(队列)系统能够很好的处理实时或者近似 实时的应用,但未处理的数据通常不会写到磁盘上,这对于Hadoop之类(一小时或者一天只处理一部分数据)的离线应用而言,可能存在问题。Kafka正 是为了解决以上问题而设计的,它能够很好地离线和在线应用
2、 设计目标
(1)数据在磁盘上存取代价为O(1)。一般数据在磁盘上是使用BTree存储的,存取代价为O(lgn)。
(2)高吞吐率。即使在普通的节点上每秒钟也能处理成百上千的message。
(3)显式分布式,即所有的producer、broker和consumer都会有多个,均为分布式的。
(4)支持数据并行加载到Hadoop中。
3、 KafKa部署结构
kafka是显式分布式架构,producer、broker(Kafka)和consumer都可以有多个。Kafka的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。几个基本概念:
(1)message(消息)是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息。如果consumer订阅了这个主题,那么新发布的消息就会广播给这些consumer。
(2)Kafka是显式分布式的,多个producer、consumer和broker可以运行在一个大的集群上,作为一个逻辑整体对外提供服务。对于 consumer,多个consumer可以组成一个group,这个message只能传输给某个group中的某一个consumer.
4、 KafKa关键技术点
(1) zero-copy
在Kafka上,有两个原因可能导致低效:1)太多的网络请求 2)过多的字节拷贝。为了提高效率,Kafka把message分成一组一组的,每次请求会把一组message发给相应的consumer。 此外, 为了减少字节拷贝,采用了sendfile系统调用。为了理解sendfile原理,先说一下传统的利用socket发送文件要进行拷贝:
Sendfile系统调用:
(2) Exactly once message transfer
怎样记录每个consumer处理的信息的状态?在Kafka中仅保存了每个consumer已经处理数据的offset。这样有两个好处:1)保存的数 据量少 2)当consumer出错时,重新启动consumer处理数据时,只需从最近的offset开始处理数据即可。
(3)Push/pull
Producer 向Kafka(push)推数据,consumer 从kafka 拉(pull)数据。
(4)负载均衡和容错
Producer和broker之间没有负载均衡机制。
broker和consumer之间利用zookeeper进行负载均衡。所有broker和consumer都会在zookeeper中进行注册,且 zookeeper会保存他们的一些元数据信息。如果某个broker和consumer发生了变化,所有其他的broker和consumer都会得到 通知。
【参考资料】
【1】Kafka主页:http://sna-projects.com/kafka/design.php
【2】Zero-copy原理:https://www.ibm.com/developerworks/linux/library/j-zerocopy/
【3】Kafka与Hadoop:http://sna-projects.com/sna/media/kafka_hadoop.pdf
相关推荐
kafka介绍
kafka介绍,介绍kafka的原理,使用,案例和引用库调用,基于大数量的场景下的消息队列切换,作为内部资料培训现在拿出来分享
【Kafka介绍】 Apache Kafka是由LinkedIn开发并随后贡献给Apache软件基金会的一个开源流处理平台。Kafka最初设计的目的是为了处理大规模的实时数据流,它能够处理来自各种数据源的活跃流式数据,如页面访问统计、...
### Kafka介绍 #### Kafka概述 Kafka是一种分布式发布-订阅消息系统,最初由LinkedIn公司开发,后成为Apache软件基金会的顶级项目。Kafka主要使用Scala语言编写,具有高吞吐量、可持久化、分布式扩展性强等特点。它...
### Kafka介绍文档 #### Kafka概述 Kafka是一种高效、可靠且分布式的发布订阅系统,它最初由LinkedIn开发,随后成为了Apache软件基金会下的顶级项目。Kafka的设计目标是为大规模的数据处理提供一个统一的平台,其...
Apache Kafka 是一个开源流处理平台,由 LinkedIn 开发,并于 2011 年成为 Apache 软件基金会的一部分。Kafka 用于构建实时数据流和流式应用程序。它以高吞吐量、可扩展性和容错性著称,适用于处理大规模数据流。 ...
**Kafka介绍** Apache Kafka是一款高性能、分布式的消息中间件,由LinkedIn开发并捐献给Apache软件基金会。它最初设计的目标是构建一个实时的数据管道,能够高效地处理大量的数据流,同时支持发布订阅和队列模型,...
### Kafka入门、介绍、使用及部署 #### 一、Kafka简介 Kafka是由LinkedIn于2010年12月开源的一款强大的消息系统,它主要用于处理活跃的流式数据,如网站的PV(页面浏览量)、用户行为数据等。传统日志分析系统虽然...
消息队列Kafka是一种分布式、高吞吐量、高可扩展性的消息服务系统。它最初是由LinkedIn公司开发,并于2011年捐赠给了Apache软件基金会,成为了开源项目之一。Kafka被设计为一个能够处理大规模数据流的平台,其高性能...
包括介绍、kafka的集群、安装、压侧等方面的简述。
内部培训用的,有史以来最详尽的kafka培训资料
这本书提供了全面的Kafka介绍,涵盖了从基础概念到高级特性的广泛内容。读者将了解到Kafka的核心设计理念,包括其分布式、高吞吐量的消息传递模型。书中可能详细解释了如何配置和管理Kafka集群,以及如何设计和实现...
zookeeper集群部署,kafka集群部署,kafka介绍,topic创建、删除、kafka监控
Apache Kafka 是一个分布式流处理平台,常用于构建实时的数据管道和应用。Kafka 提供了高吞吐量、低延迟的消息传递能力,是大数据领域中重要的消息队列(MQ)解决方案。Kafka-Eagle 是针对 Kafka 集群设计的一款高效...
**Kafka介绍** Kafka是由Apache软件基金会开发的一个开源流处理平台,它最初由LinkedIn设计并贡献给Apache项目。Kafka是一种高吞吐量、分布式发布订阅消息系统,旨在处理实时数据流。它被广泛应用于大数据领域,...
#### 1.2 Kafka介绍 Kafka是一个分布式发布-订阅消息系统,由Scala编写。它是一个持久的日志服务,主要处理实时流数据,并且可以与流处理框架如Storm或Flink配合使用,作为数据源。Kafka的架构包括Producer(生产者...
1. **Apache Kafka 介绍**:Kafka是一个分布式流处理平台,它允许创建实时的数据流,这些数据流可以被多个消费者同时消费。Kafka的核心概念包括生产者(Producer)、主题(Topic)、分区(Partition)和消费者...
Apache Kafka是一款高性能分布式消息队列系统,它的特点包括可分区、可备份以及基于Zookeeper进行协调。消息队列系统是现代企业级系统架构中的核心组件之一,它允许不同的系统组件之间通过消息进行异步通信,具有...
kafka基本资料、相关术语介绍、简单实现。Broker、Topic、Partition
### Apache Kafka介绍与核心知识点详解 #### 一、Apache Kafka概览 **Apache Kafka**是一种分布式提交日志服务,广泛应用于数据摄入场景。它提供了一系列关键特性,包括可扩展性、高性能、高可靠性和灵活性。从...