fasionchan

读万卷书,行万里路,品万味肴,撸万行码。

Kafka简介

| Comments

Kafka是一个高吞吐的分布式消息系统,由Linkin公司开源,成为一个Apache项目。Kafka可以看做是一个快速、分布式、可扩展、可分区、可复制、持久化的日志服务。它提供了作为消息系统的实用功能,架构设计却是相当独特的。

发布-订阅模型

  • Kafka采用话题(topic)对消息进行分类;
  • 向Kafka发布(Publish)消息的进程称为生产者(producer);
  • 从Kafka订阅(Subscribe)消息的进程称为消费者(consumer);
  • Kafka集群可以由若干台服务器组成,称为代理(broker);

话题和日志

话题是消息的分类名:生产者向某个话题发布消息;消费者从某个话题订阅消息。一个话题可以分为多个分区(partition),分区的作用:首先,当消息规模扩张到超过一台机器的处理能力时,可以把压力分散到多台机器;其次,分区也让应用并行处理消息成为可能。Kafka组织分区日志的方式如下:

发布到一个话题的消息写到该话题下某一分区,由消息所带的键(key)决定:键相同的所有消息落到同一个分区。每个分区都是一个有序不可变的消息序列,持续地追加到一个提交日志(commit log)。Kafka为分区中的每条消息分配了一个序号,称为偏移量(offset),唯一指定了每条消息在分区中的位置。

Kafka根据配置周期保留周期内的所有消息,不管消息有没有被消费。例如,如果日志被配置成保留两天,那么一个消息发布后的两天内都是可供消费的,两天之后才会被清除以释放空间。

Kafka维护的元数据只有消费者在日志中的位置,也就是偏移量(offset)。事实上,这个偏移量是由消费者控制的:正常情况下消费者在读消息的时候线性自增其偏移量。这样看来,消费者可以以任意顺序消费消息;也可以通过重置偏移量从新处理消息,这一点非常有用。

这些特性决定了Kafka消费者将是非常灵活的:可以随时进入、随时离开而不会对集群或其他消费者产生影响。例如,可以使用Kafka提供的命令行工具来”tail”任何话题的内容而不用担心会影响到已经存在的消费者。

用法示例

Comments