概念和基本架构

Kafka介绍


Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多生产者、多订阅者,基于
zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,
消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访
    问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。
  • 支持在线水平扩展

image.png
有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。
对于消息中间件,消息分推拉两种模式。Kafka只有消息的拉取,没有推送,可以通过轮询实现消息
的推送。

  • Kafka在一个或多个可以跨越多个数据中心的服务器上作为集群运行。
  • Kafka集群中按照主题分类管理,一个主题可以有多个分区,一个分区可以有多个副本分区。
  • 每个记录由一个键,一个值和一个时间戳组成。


    Kafka优势

  1. 高吞吐量:单机每秒处理几十上百万的消息量。即使存储了许多TB的消息,它也保持稳定的性
    能。
  2. 高性能:单节点支持上千个客户端,并保证零停机和零数据丢失。
  3. 持久化数据存储:将消息持久化到磁盘。通过将数据持久化到硬盘以及replication防止数据丢
    失。
    1. 零拷贝
    2. 顺序读,顺序写
    3. 利用Linux的页缓存
  4. 分布式系统,易于向外扩展。所有的Producer、Broker和Consumer都会有多个,均为分布式
    的。无需停机即可扩展机器。多个Producer、Consumer可能是不同的应用。
  5. 可靠性 - Kafka是分布式,分区,复制和容错的。
  6. 客户端状态维护:消息被处理的状态是在Consumer端维护,而不是由server端维护。当失败
    时能自动平衡。
  7. 支持online和offline的场景。
  8. 支持多种客户端语言。Kafka支持Java、.NET、PHP、Python等多种语言。