Fork me on GitHub

Kafka介绍

  Kafka是一种分布式的,是基于消息发布/订阅模式实现的消息系统。
  主要特性:
  1)消息持久化:要从大数据中获取真正的价值,那么不能丢失任何信息。Kafka以时间复杂度O(1)的方式提供消息持久化能力,即使对TB级以上的数据也能保证常数时间复杂度的访问性能。
  2)高吞吐:在廉价的商用机器上也能支持单机每秒10万条以上的吞吐量。
  3)分布式:支持消息分区以及分布式消费,并保证分区内的消息顺序。
  4)跨平台:支持不同技术平台的客户端(如java、.NET、PHP、Ruby或Python等)。
  5)实时性:支持实时数据处理和离线数据处理。
  6)伸缩性:支持水平扩展。

Topic:

  主题,或者说是一类消息。类似于RabbitMQ中的queue。可以理解为一个队列。

Broker:

  一个Kafka服务称之为Broker。Kafka可以集群部署,每一个Kafka部署就是一个Broker。

Producer & Consumer:

  生产者和消费者。一般消息系统都有生产者和消费者的概念。生产者产生消息,即把消息放入Topic中,而消费者则从Topic中获取消息处理。一个生产者可以向多个Topic发送消息,一个消费者也可以同时从几个Topic接收消息。同样的,一个Topic也可以被多个消费者来接收消息。

Partition:

  分区,或者说分组。分组是Kafka提升吞吐量的一个关键设计。这样可以让消费者多线程并行接收消息。创建Topic时可指定Parition数量。一个Topic可以分为多个Partition,也可以只有一个Partition。每一个Partition是一个有序的,不可变的消息序列。每一个消息在各自的Partition中有唯一的ID。这些ID是有序的。称之为offset,offset在不同的Partition中是可以重复的,但是在一个Partition中是不可能重复的。越大的offset的消息是最新的。Kafka只保证在每个Partition中的消息是有序的,就会带来一个问题,即如果一个Consumer在不同的Partition中获取消息,那么消息的顺序也许是和Producer发送到Kafka中的消息的顺序是不一致的。这个在后续会讨论。

-----------------本文结束,感谢您的阅读-----------------