kafka简介

来源:互联网 发布:centos phpbrew 编辑:程序博客网 时间:2024/04/25 15:47

Kafka是一个分布式发布的订阅消息系统。一开始由LinkedIn公司使用scala编写的,用作LinkedIn的活动流和运营数据处理管道的基础,它具有高水平扩展和高吞吐量的特点。现在成为了Apache项目的一部分,主要用于处理活跃的流式数据。活跃的流式数据在web网站应用中非常常见,这些数据包括网站的页面访问量(Page View)、用户访问了什么内容,搜索了什么内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。

 

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

 

Kafka已被多家不同类型的公司作为多种类型的数据管道和消息系统使用,比较有名的有:淘宝、支付宝、百度和twitter。

目前越来越多的开源分布式系统支持与kafka集成,比如Apache flume、apache Storm、spark、elasticsearch等。

 

常用的消息队列有:RabbitMQ、Redis、ZeroMQ、ActiveMQ。

ActiveMQ、RabbitMQ比较:

Kafka的动态扩容是通过zookeeper来实现的。

 

Kafka构架

Zookeeper:kafka集群、 producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。

 


 

Kafka特点:

1.      同时为发布和订阅提供高吞吐量;

2.      可进行持久化操作,将消息持久化到磁盘(数据不易丢失),即使是海量数据,因此可以用于批量消费;

3.      是分布式系统,易于向外扩展,所有的producer、broker和consumer都会有多个,都是分布式的,在不停机的情况下可以扩展;

4.      消息被处理的状态是在consumer端维护,不是由server端维护,当失败的时候能自动平衡。

5.      同时支持离线数据处理和实时数据处理。

6.      Kafka系统支持与来自不同平台(如java、.NET、PHP、Ruby或Python等)的客户端相集成。

7.      轻量级。

 

 

 

1.      Producer:将消息(message)均衡地发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition,可靠性由用户控制。Produce可以通过任意一个Broker知道其他多有Broker的位置;

2.      Broker:kafka上的服务器被称为Broker,负责消息的接受和发送,它可以将消息持久化到磁盘上,还可以设置最大保存时间,不会在consumer消费完后就删除。Broker里面有Topic和Parition;

3.      Topic:Kafka将消息种子分门别类, 每一类的消息称之为话题(Topic)。每条发布到Kafka集群的消息都有一个类别,类似于一个标签;

4.      Partition:每个Topic包含一个或多个Partition,每个Partition可保存到不同机器上。一个consumer可以同时读取多个Partition,同时保证数据的相对有序行。即实现伸缩性和并行性;

5.      Consumer:消息消费者,向Kafkabroker读取消息的客户端,可以订阅一个或多个Topic。每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group),message只能传输给某个group中的某一个consumer。

0 0
原创粉丝点击