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介绍相关推荐

  1. 分布式消息系统 Kafka 简介

    分布式消息系统 Kafka 简介 阅读目录 5.1 吞吐量 5.2 负载均衡 5.3 拉取系统 5.4 可扩展性 5.5 消息删除策略 6.1 消息队列 6.2 行为跟踪 6.3 元信息监控 6.4 ...

  2. 消息系统kafka之二 kafka的HA(高可用)

    在前面的<消息系统kafka之一 系统简介>的为什么选择kafka中已经提到了kafka高可用的特性. 下面是kafka与其他消息系统之间的区别 可以看出,kafka支持持久化消息,消息回 ...

  3. 消息队列Kafka介绍

    Kafka用来构建实时数据管道和数据流应用.它是水平可扩展的,具有容错性的,极其快速的,并且已应用于上千家公司的产品环境中. 介绍 Apache Kafka是一个分布式流平台[distributed ...

  4. 发布订阅的消息系统 Kafka的深度解析

    发布&订阅的消息系统 Kafka的深度解析 2015-01-27 10:25 Jason Guo Jason Guo的博客 字号: T | T 一个典型的kafka集群中包含若干produce ...

  5. kafka内存不断增加_分布式发布订阅消息系统Kafka 为什么快

    Kafka 为什么能那么快 | Kafka高效读写数据的原因 无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能(好简单的样子),一是 Producer 生产的数据存到 broker ...

  6. 为什么rocketmq的queue分为读写?_分布式发布订阅消息系统Kafka 为什么快

    Kafka 为什么能那么快 | Kafka高效读写数据的原因 无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能(好简单的样子),一是 Producer 生产的数据存到 broker ...

  7. 消息系统kafka原理解析

    Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Clouder ...

  8. kafka redis vs 发布订阅_发布订阅的消息系统 Kafka的深度解析

    背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能 高吞吐 ...

  9. kafka session.timeout.ms 是指消费一条数据的时间?_阿里工程师分享:浅谈分布式发布订阅消息系统Kafka...

    Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ngi ...

最新文章

  1. 玩转高性能超猛防火墙nf-HiPAC
  2. buHdoZer‘s Arch
  3. JavaScript学习笔记(七)——函数的定义与调用
  4. 如何确定CPU是大端字节序还是小端字节序?
  5. iOS 应用安全权威指南电子书 PDF 分享
  6. 20172307 2017-2018-2 《程序设计与数据结构》实验5报告
  7. (40)FPGA四种常用逻辑门(或非门)
  8. 面试题--------4、数据类型
  9. 过来康康,一起来学VScode插件
  10. 360n4刷android8.1,【从此,任何人都可以刷N4】关于系统降级===线刷方法,我也说两句吧。...
  11. 群论基础速成(2):子群,陪集,正规子群,商群
  12. OptiFDTD应用:纳米盘型谐振腔等离子体波导滤波器
  13. 服务器里的系统盘是什么意思,云服务器系统盘是什么意思
  14. 2021年江西省安全员C证考试报名及江西省安全员C证模拟考试题库
  15. i标签和em标签的区别
  16. 硕士阶段人工智能有哪些比较好的发论文的方向?
  17. Niagara基于javascript的控件开发
  18. 选点问题(贪心算法)
  19. oracle收购了什么意思,BEA为何会被Oracle收购?
  20. 小学生台灯哪个品牌更护眼?学习专用的护眼台灯品牌

热门文章

  1. GEF入门实例_总结_04_Eclipse插件启动流程分析
  2. 《Unix网络编程卷1:套接字联网API》读书笔记
  3. php apc缓存以及与redis的对比
  4. Linux设备管理(三)_总线设备的挂接
  5. 激活Maven profile的几种方式
  6. CentOS 6.4 安装 media wiki 1.23.6(转)
  7. SQL Server2008R无法登录的解决方案(系统文件损坏)1814 18456....不看别后悔,有用请点赞...
  8. 无法识别的属性“decompressionEnabled”处理方法
  9. 巧用ftp命令(一)--利用ftp分发ssh密钥
  10. 悲观锁 HibernateTest.java