• 发布和订阅
  • 使用原因

1、解耦,可以确保两个系统互不干扰

2、冗余,消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列采用的”插入-获取-删除”范式,确保处理数据过程失败后不会数据丢失

3、扩展性,增大消息入队和处理是先对容易的

4、峰值处理能力,在访问量剧增的情况下,可以在不增加机器的情况下确保系统的稳定运行

5、可恢复性,即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理

6、有序性,大多数使用场景下,数据处理的顺序都很重要,Kafka保证一个Partition内的消息的有序性

7、异步通信,消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它

  • 基本结构

kafka基本结构和特性

       为了使得kafka的吞吐率可以线性提高,物理上把一个topic拆分为一个或多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件

       每个日志文件都是一个log entry序列,消息体就保存在序列中,每条消息都有一个当前Partition下唯一的64字节的offset,它指明了这条消息的起始位置,这个log entry并非由一个文件构成,而是分成多个segment,每个segment以该segment第一条消息的offset命名并以“.kafka”为后缀

kafka基本结构和特性

       因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证)

kafka基本结构和特性

      对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略删除旧数据。

  • kafka的特性

Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。

具有以下特性:

1、快速持久化,可以在O(1)的系统开销下进行消息持久化;

2、高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;

3、完全的分布式系统,Broker、Producer(生产)、Consumer(消费)都原生自动支持分布式,自动实现负载均衡,同时保证每个Partition内的消息顺序传输;

4、同时支持离线数据处理和实时数据处理

5、Scale out:支持在线水平扩展,一般broker数量越多,集群吞吐率越高

 

相关文章: