Kafka组件包含Producer、Broker、Consumer和Zookeeper。本文将介绍Kafka Consumer组件的功能以及设计要点。
Kafka Consumer订阅Kafka的topic,并主动从Kafka Broker拉取消息进行处理。每个Kafka Consumer自己维护最后一个已读取消息的offset,并在下次请求从这个offset开始的消息,这一点不同于ZeroMQ、RabbitMQ等其他消息队列,这种基于pull的机制大大降低了Broker的压力,使得Kafka Broker的吞吐率很高。
Kafka允许多个Consumer构成一个Consumer Group,共同读取同一topic中的数据,提高数据读取效率。同一Consumer Group下不同的Consumer对某个topic的消息消费是不会重复的。Kafka可自动为同一Group中的Consumer分摊负载,从而实现消息的并发读取,并在某个Consumer发生故障时,自动将它处理的partition转移给同Group中其他Consumer处理。
由于Kafka在大数据领域应用起来越广泛,很多大数据 开源系统均主动增加了对Kafka的支持,几种常用的Kafka Consumer组件如下图所示:
Kafka Consumer组件Flume Kafka Source:Flume软件包中内置Kafka Consumer,可将从 Kafka Broker中读取的数据,写入Flume Channel。
Kafka-Storm:Storm软件包中内置Kafka Consumer,被封装到Storm Spout中,可从Kafka Broker中读取数据,发送给后面Storm Bolt。
Kafka-Spark Streaming:Spark Streaming软件包中内置Kafka Consumer,它可从Kafka读取数据,并将其转化为微批处理,并进一步交由Spark引擎处理。
LinkedIn Camus:LinkedIn开源的Hadoop-kafka连接件,可将Kafka中的数据导入Hadoop。
网友评论