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使用的PPT,还有Kafka的源代码。
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献...
Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据和运营数据,同时也是支持通用的消息语义(messaging semantics)。其中活跃的流式数据包括页面访问量(page view)、被查看内容方面的...
消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。 顺序保证 在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证...
1.1. 为何使用消息系统 1.1.1. 解耦 在项目启动之初来预测将来项目会碰到什么需求, 是极其困难的。 消息系统在处理过程中间插入了一个隐含的、 基于数据的接口层, 两边的处理过程都要实现这一接口。 这允许你独立...
本文详细解析了Kafka的设计原理,重点介绍了Kafka作为一种高效的分布式消息系统的核心组件和机制。首先,文档解释了Kafka的总控制器(Controller)的作用,它负责管理集群中的分区和副本状态,并在必要时进行Leader...
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量...
介绍Kafka背景,使用消息系统的优势,常用消息系统对比,Kafka架构介绍,Kafka实现语义分析,Replication及Leader Election机制剖析,Consumer Group Rebalance实现原理介绍,以及Benchmark测试。
kafka介绍:Kafka知识领域+消息队列技术关键词+安装、配置、使用、主题、分区、副本、消费者组、流处理、事件源存储、性能优化、安全性、集群部署内容关键词+构建实时数据管道、解耦服务、可靠消息传递、数据可靠性...
kafka消息系统的设计介绍,转载对kafka系统设计的翻译。
Kafka 入门、Kafka 的基本使用、客户端详解、Kafka 原理介绍、Kafka 运维与监控以及高级 Kafka 应用,在实际业务系统中实现消息队列应用、应用程序集成、分布式存储构建,甚至是流处理应用的开发与部署。
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比。并介绍了Kafka的架构,Producer消息路由,ConsumerGroup以及由其实现的不同消息分发方式,Topic&Partition,最后介绍了Kafka...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
《Apache Kafka实战》共分为10章:第1章全面介绍消息引擎系统以及Kafka的基本概念与特性,快速带领读者走进Kafka的世界;第2章简要回顾了Apache Kafka的发展历史;第3章详细介绍了Kafka集群环境的搭建;第4、5章深入...
Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列, 可以处理大量的数据, 并使您 能够将消息从一个端点传递到另一个端点. Kafka适合离线和在线消息消费. Kafka消息保留在磁盘 上, 并在群集内复制以防止...
本文档提供了对Kafka这一分布式消息系统的全面解析,从基本概念到实际应用,涵盖了其在日志收集、消息系统、用户活动跟踪等方面的使用场景。首先介绍了Kafka的核心概念,如Broker、Topic、Producer、Consumer等,...