Apache Kafka

Apache Kafka是一个分布式、分区的实时消息处理系统,提供高吞吐量的消息发布和订阅功能。它将生产者和消费者解耦,并允许消息持久化以供实时或离线处理。Kafka的架构包括topic、数据分区、生产者、消费者和Zookeeper。每个topic由多个分区组成,生产者可以指定消息发送到特定分区。消费者组织成组,同组内的消息只被一个消费者消费,实现消息的有序性和可扩展性。
摘要由CSDN通过智能技术生成

Apache Kafka

实时的生产者消费者处理系统,类似于消息队列的感觉。它将生产者和消费者松耦合,从而使得生产和消费不会相互制约。它可用于收集各种各样的消息,例如用户行为,传感器数据,日志,metrics等,在kafka的后面再对接多种多样的分析工具进行消费。

架构设计

Kafka是一个分布式的,分区的,多副本的commit log服务。消息按照种类被划分为不同的topics,同一个topic又被划分为多个不同的partitions,然后散布到不同的机器中,一个分区在一个机器中是连续存储的。Kafka由多个server组成cluster,这些server叫作brokers。一个简单的架构如下图所示:

topic和数据分区

前面说过,每个topic由多个partitions组成,每个partition是一个有序的不可变的消息序列。

生产者和消费者

Kafka对它存储的消息保存一定的时间(可配置),这就使得消息既可以被real-time处理,也可以被off-line Hadoop任务处理。Producer可以指定要将message发布到哪个topic下的哪个partition。多个Consumer可以组成一个Consumer group,然后消息可能被一个group内的任意一个consumer消费。同一条消息会被广播给不同的group。

Kafka具体架构

上面的介绍应该已经大致讲清楚了producer,consumer和broker的关系,以及消息存储逻辑实体topic和物理实体partitions。

如上图所示,多个broker对接多个producers,多个consumers。多个consumer可以隶属于同一个group,共同消费某一个topic下的消息。为了保证fault-tolerant,消息会被replicated多份,放在不同的brokers中。

producer

生产者的职能

  1. 决定选择消息要发布到哪个topic下的哪个partition
  2. 如何选择呢? round-robin或者基于key的hash(给消息指定一个key以及hash函数)

consumer

消息的两种处理模型: (a)消息队列模型,供给多个人消费,(b)pub-sub模型,消息被广播到多个不同人消费。在kafka中,通过consumer group将两种模型进行统一化。一条消息会被广播到多个不同的group中的某一个consumer中。如果,一个group中有多个consumers,那么这相当于消息队列模型;如果只有一个consumer,那么相当于pub-sub模型。

每一个partition只会被一个consumer消费。partition自身是严格ordered的,而partition之间非全局有序的。这也就是说,如果你需要以全局严格有序的方式消费某一个topic,那么只能使用一个partition,也就只有一个consumer。

上图为kafka consumer group消费架构图,可以看出不同group都可以完整消费Topic中的所有数据,并且能够根据partition与consumer group内的consumers的数量,合理的调整消费比例。

zookeeper

留待专门的zookeeper讲解。


  • [1] Thein K M M. Apache kafka: Next generation distributed messaging system[J]. International Journal of Scientific Engineering and Technology Research, 2014, 3(47): 9478-9483.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值