Kafka,分布式消息队列系统

整个大数据由各个子系统组成,数据需要在各个子系统中高性能、低延迟的不停流转。传统的企业消息系统并不适合大规模数据处理,为了既能处理在线应用(消息),也能处理离线应用(数据文件和日志),Kafka应运而生,它具有极高吞吐量和较强的扩展性与高可用,主要用于处理活跃的流式数据。

最初Kafka被用于进行日志收集、用户行为实时收集以及机器状态监控等,后来还作为流式计算系统的底层构件。对于Hadoop这样的传统日志分析系统,其能够提供离线处理日志消息的能力,但要是进行实时处理,就会有较大延迟,而通过Hadoop的并行加载机制加载Kafka消息队列系统后就能统一线上和离线的消息,提供实时或近实时消息处理能力。

总的来说Kafka可以起到两个作用:①降低系统组网复杂度 ②降低编程复杂度;各个子系统不再是互相协商接口,各个子系统类似插口插在插座上,Kafka承担高速数据总线的作用。

Kafka的架构非常简单,是显示的分布式架构,主要涉及以下三个角色:

1、 消息生产者(Producer):消息和数据的生产者,生产特定主题(Topic,指Kafka处理的信息源【Feeds of Messages】的不同类别或种子【Feed】名,对于每个主题【Topic】Kafka集群都会维护这样一分区的日志【Log】)的消息并传入代理服务器集群;

2、 代理服务器(Broker):也称缓存代理,是Kafka集群中的一台或多台服务器;

3、 消息消费者(Consumer):消息和数据消费者,订阅Topic并处理其发布的消息。

其中【消息生产者】【代理服务器】【消息消费者】都可以有多个,消息生产者和消息消费者实现Kafka注册的接口,数据从消息生产者发送到代理服务器,代理服务器承担一个中间缓存和分发的作用,代理服务器的作用类似缓存,是活跃的数据和离线处理系统之间的缓存,主要把数据分发注册到系统中的消息消费者。客户端和服务器端的通信是基于简单的、高性能的且与编程语言无关的TCP实现的。

Kafka消息发送的流程大致为:消息生产者根据指定的分区方法将消息发布到指定的Topic的Partition(分区,是Topic物理上的分组);Kafka集群接收到消息发送者发过来的消息后,将其转换到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费;消息消费者从Kafka及群里pull数据,并控制获取消息的offset。

Kafka具有以下5个特点:

1、 同时为发布和订阅提供高吞吐量:据了解,Kafka每秒可以生产约25万条消息(约50MB),每秒处理55万条消息(月110MB);

2、 可进行持久化操作:将消息持久化到磁盘,因此可用于批量消费,如ETL等。通过将数据持久化到硬盘以及实现多副本,从而防止数据丢失;

3、 分布式系统,已于向外扩展,可以与ZooKeeper结合:所有的【消息生产者,Producer】【代理服务器,Broker】【消息消费者,Consumer】都会有多个,均匀分布式的,无需停机即可扩展机器;

4、 消息被处理的状态是在消息消费者端维护,而不是由服务器端维护,当失败时能自动平衡;

5、 支持在线应用和离线应用场景。

Kafka的应用场景主要有以下6种:

1、 消息队列

2、 行为跟踪

3、 日志收集

4、 数据监控和互换

5、 流处理

6、 持久性日志