kafka的介绍

转载 2016年05月31日 18:42:41

1. Kafka的作用

在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转。有没有一个系统可以同时搞定在线应用(消息)和离线应用(数据文件,日志)?这就需要kafka。Kafka可以起到两个作用:

1、降低系统组网复杂度。

2、降低编程复杂度,各个子系统不在是相互协商接口,各个子系统类似插口插在插座上,Kafka承担高速数据总线的作用。

2. Kafka产生背景

Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据。活跃的流式数据在web网站应用中非常常见,这些数据包括网站的pv、用户访问了什么内容,搜索了什么内容等。 这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。

 

传统的日志分析系统提供了一种离线处理日志信息的可扩展方案,但若要进行实时处理,通常会有较大延迟。而现有的消(队列)系统能够很好的处理实时或者近似实时的应用,但未处理的数据通常不会写到磁盘上,这对于Hadoop之类(一小时或者一天只处理一部分数据)的离线应用而言,可能存在问题。Kafka正是为了解决以上问题而设计的,它能够很好地离线和在线应用。

3. Kafka架构

  
 
 

 

生产者(producer):消息和数据产生者

代理(Broker):缓存代理

消费者(consumer):消息和数据消费者

 

架构很简单,Producer,consumer实现Kafka注册的接口,数据从producer发送到broker,broker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumer。

4. 设计要点

1、直接使用linux 文件系统的cache,来高效缓存数据。

 

2、采用linux Zero-Copy提高发送性能。传统的数据发送需要发送4次上下文切换,采用sendfile系统调用之后,数据直接在内核态交换,系统上下文切换减少为2次。根据测试结果,可以提高60%的数据发送性能。Zero-Copy详细的技术细节可以参考: https://www.ibm.com/developerworks/linux/library/j-zerocopy/

 

3、数据在磁盘上存取代价为O(1)。

a.  kafka以topic来进行消息管理,每个topic包含多个part(ition),每个part对应一个逻辑log,有多个segment组成。

b.  每个segment中存储多条消息(见下图),消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。

c.  每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。

d.  发布者发到某个topic的消息会被均匀的分布到多个part上(随机或根据用户指定的回调函数进行分布),broker收到发布消息往对应part的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。


 
  

 

4、显式分布式,即所有的producer、broker和consumer都会有多个,均为分布式的。

Producer和broker之间没有负载均衡机制。

broker和consumer之间利用zookeeper进行负载均衡。所有broker和consumer都会在zookeeper中进行注册,且zookeeper会保存他们的一些元数据信息。如果某个broker和consumer发生了变化,所有其他的broker和consumer都会得到通知。


作者:jiezhu2007  地址:http://itindex.net/detail/49306-%E6%95%B0%E6%8D%AE-%E6%80%BB%E7%BA%BF-kafka


补充:

现阶段,有一个叫做kafka connector的东西出来了。它是怎么来的或者说是做什么的,请参见隔壁的文章(也是转的)

       

Kafka的简单介绍

一、为什么需要消息系统 1.解耦:   允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2.冗余:   消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数...
  • u012470138
  • u012470138
  • 2017年06月28日 14:13
  • 337

Kafka剖析(一):Kafka背景及架构介绍

Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spa...
  • Jarvis_fan
  • Jarvis_fan
  • 2016年09月27日 00:24
  • 209

Kafka简介及各个组件介绍

Kafka:分布式发布-订阅消息系统Kafka分布式发布-订阅消息系统 介绍 组件 Topics and Logs Partition Producers Consumers Guarantees 1...
  • a568078283
  • a568078283
  • 2016年05月20日 21:12
  • 2168

Kafka简要介绍

介绍:        Kafka是一个高吞吐量的分布是消息系统 ,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)...
  • u010022051
  • u010022051
  • 2015年03月02日 15:21
  • 706

Kafka笔记-1-kafka入门介绍

kafka介绍 生产者消费者
  • wfzczangpeng
  • wfzczangpeng
  • 2016年06月30日 14:23
  • 623

kafka入门介绍及环境搭建

问题导读 1.kafka是否需要zookeeper? 2.kafka是什么? 3.kafka包含哪些概念? 4.如何模拟客户端发送、接受消息初步测试? 5.kafka cluster怎么同zooke...
  • zhoulixin8
  • zhoulixin8
  • 2016年06月28日 18:13
  • 979

Kafka 高性能吞吐揭秘

A high-throughput distributed messaging system. --Apache Kafka Kafka作为时下最流行的开源消息系统,被广泛地应用在数据...
  • yanshu2012
  • yanshu2012
  • 2017年02月09日 11:22
  • 941

Kafka 设计与原理详解

一、Kafka简介1.1 背景历史当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时...
  • suifeng3051
  • suifeng3051
  • 2015年08月28日 16:36
  • 64632

kafka connect简介以及部署

Kafka Connect是一种用于在Kafka和其他系统之间可扩展的、可靠的流式传输数据的工具。它使得能够快速定义将大量数据集合移入和移出Kafka的连接器变得简单。...
  • u011687037
  • u011687037
  • 2017年02月26日 15:43
  • 5244

Kafka 实现的几个技术细节讨论

http://www.cnblogs.com/mengyou0304/p/4836555.html 关于Kafka大方向上的介绍已经很多了,infoq上面不少不错的资源 http://...
  • bigtree_3721
  • bigtree_3721
  • 2017年11月01日 10:50
  • 173
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:kafka的介绍
举报原因:
原因补充:

(最多只允许输入30个字)