Apache Kafka开发入门指南

作者:chszs,转载需注明。

Apache Kafka可以帮助你解决在发布/订阅架构中遇到消费数百万消息的问题。

如今,商业应用、社交应用以及其它类型的应用产生的实时信息在不断增长,这些信息需要以简单的方式快速、可靠地路由到各种类型的接收者。在大多数情况下,产生信息和消费信息的应用都是自然分开的,彼此不可互相访问。

需要一种机制,让信息的生产者和消费者能无缝地集成。

在大数据时代,收集数据也是一个挑战——因为数据量太大。第二个挑战是分析数据,它通常分为:

1)用户行为数据

2)应用程序性能跟踪

3)日志形式的活动数据

4)事件消息

消息订阅是一种机制,可以连接各种应用程序,帮助消息在彼此之间路由。

Kafka是一个实时消息传输的解决方案,可处理大量实时信息,并把这些信息快速路由到各种消费者。Kafka提供了信息生产者和消费者之间的无缝集成,无需对生产者的信息进行阻塞,也无需告诉生产者那些消费者的位置。

Apache Kafka是一个开源、分布式的消息发布/订阅系统,其主要设计特性如下:

1)消息持久化

要从大数据中获取真正的价值,那么不能丢失任何信息。Apache Kafka设计上是时间复杂度O(1)的磁盘结构,它提供了常量时间的性能,即使是存储海量的信息(TB级)。

2)高吞吐

记住大数据,Kafka的设计是工作在标准硬件之上,支持每秒数百万的消息。

3)分布式

Kafka明确支持在Kafka服务器上的消息分区,以及在消费机器集群上的分发消费,维护每个分区的排序语义。


4)多客户端支持

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

5)实时

生产者线程产生的消息对消费者线程应该立即可见,此特性对基于事件的系统(比如CEP系统)是至关重要的。

注:CEP即Complex Event Processing,复杂事件处理。

Apache Kafka提供了一个实时的发布/订阅解决方案,它客服了消费实时大数据的挑战,这些数据量可能在数量级的增长、真实的数据。Kafka还支持在Hadoop系统上做并行数据载入。

下面的视图显示了Apache Kafka消息系统支持的一个典型的大数据汇聚和分析的场景:


Apache Kafka开发入门指南_cep



在生产者端,有数种不同的生产者:

1)前端Web应用产生的应用日志

2)生产者代理产生的Web分析日志

3)生产者适配器产生的传输日志

4)生产者服务产生的调用跟踪日志

在消费者端,有数种不同的消费者:

1)离线消费者:消费消息并在Hadoop或传统的数据仓库中存储消息用于离线分析

2)近乎实时的消费者:消费消息并在任意NoSQL数据库(如HBase或Cassandra)中存储消息用于近实时分析

3)实时消费者:在内存数据库中过滤消息,并在相关的群组中触发警告事件