1. 引言
互联网够公司的日志无处不在,web日志,js日志,搜索日志,监控日志等等。对于这些日志的离线分析(Hadoop),wget&rsync虽然人力维护成本较高,但可以满足功能行需求。但对于这些日志的实时分析需求(例如实时推荐,监控系统),则往往必须要引入一些“高大上”的系统。
传统的企业消息系统(例如WebSphere)并不是非常适合大规模的日志处理系统,理由如下:
1) 过于关注可靠性,这些可靠性增加了系统实现&API的复杂度,而在日志处理过程中,丢失几条日志常常“无伤大雅”
2) 包括API,scale及消息缓冲的设计理念都不适合Hign Throughput的日志处理系统
针对这些问题,近些年各个公司都做了一些自己的日志收集系统,例如:Facebook的Scribe、Yahoo的data highway,Cloudera的Flume,Apache的Chukwa,百度的BigPipe,阿里的RocketMQ。
Kafka是LinkedIn开发并开源出来的一个高吞吐的分布式消息系统。其具有以下特点:
1) 支持高Throughput的应用
2) scale out:无需停机即可扩展机器
3) 持久化:通过将数据持久化到硬盘以及replication防止数据丢失
4) 支持online和offline的场景。
2. 介绍
kafka使用scala开发,支持多语言客户端(c++、java、python、go等)其架构如下[2]:
Producer:消息发布者
Broker:消息中间件处理结点,一个kafka节点就是一个broker
Consumer:消息订阅者
kafka的消息分几个层次:
1) Topic:一类消息,例如page view日志,click日志等都可以以topic的形式存在,kafka集群能够同时负责多个topic的分发
2) Partition: Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。
3) Message:消息,最小订阅单元
具体流程:
1. Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面
2. kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。
3. Consumer从kafka集群pull数据,并控制获取消息的offset
3. 设计
ThroughPut
High Throughput是kafka需要实现的核心目标之一,为此kafka做了以下一些设计:
1)数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能
2)zero-copy:减少IO操作步骤
3)数据批量发送
4)数据压缩
5)Topic划分为多个partition,提高parallelism
load balance&HA
1) producer根据用户指定的算法,将消息发送到指定的partition
2) 存在多个partiiton,每个partition有自己的replica,每个replica分布在不同的Broker节点上
3) 多个partition需要选取出lead partition,lead partition负责读写,并由zookeeper负责fail over
4) 通过zookeeper管理broker与consumer的动态加入与离开
pull-based system
由于kafka broker会持久化数据,broker没有内存压力,因此,consumer非常适合采取pull的方式消费数据,具有以下几点好处:
1)简化kafka设计
2)consumer根据消费能力自主控制消息拉取速度
3)consumer根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等
Scale Out
当需要增加broker结点时,新增的broker会向zookeeper注册,而producer及consumer会根据注册在zookeeper上的watcher感知这些变化,并及时作出调整。
Reference
[1] Apache Kafka
[2] Kafka: a Distributed Messaging System for Log Processing
[3] Kafka Client
相关推荐
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**是一种分布式提交日志服务,广泛应用于数据摄入场景。它提供了一系列关键特性,包括可扩展性、高性能、高可靠性和灵活性。从...