Kafka 介绍

1 介绍

Kafka 是一个分布式、分区的、多副本的、多生产者、多订阅者,基于 Zookeeper 协调的分布式日志系统,也可以当作 MQ 系统。
常见用法:用于收集 web/Nginx 日志,访问日志,消息服务等等。

主要应用场景:日志收集和消息系统。

2 Kafka 主要设计目标

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

Kafka 应用架构组成:生产者、Kakfa 实例、消费者。三者都在线支持水平扩展。
Kafka集群:多个Kafka 实例(broker)可构成一个 Kafka 分布式集群,Kafka 保存消息时以主题(topic)对消息进行分类一个主题可以有多个分区(分区可以位于一个 Kafka 实例上,也可以位于不同实例上,类似于关系数据库的分不分表),每个分区可以有多个副本(可以理解为主从,但是Kafka 的副本不支持对外读功能,仅用于保证高可用)。

在对 Kafka 中的消息进行消费是, 每个主题一个分区和消费者为1:1的关系。如果为 1:N 的话会造成消息的重复消费(因为 消费者在读取消息时所使用的偏移量由消费者自己维护,如果多个客户端同时消费一个分区,会由于偏移量无法保持同步而导致消息重复消费)。如果一个消费者无法消费掉当前一个主题分区的消息,则可以通过扩展主题分区和消费者的方式解决,在消费者数量大于等于主题分区的情况下,仅仅增加消费者数量是无法加快消息的处理速度的。

消息传递模式:点对点传递模式、发布-订阅模式。Kafka 采用发布-订阅模式。
Kafka 只有消息的拉去,没有推送,可以通过轮询实现消息的推送。

Kafka 的特点:

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

Kafka 具有四个核心 API:

  • Producer API:允许应用程序将记录流发布到一个或多个 Kafka 主题
  • Consuer API:允许应用程序订阅一个或多个主题并处理为其生成的记录流;
  • Streams API:允许应用程序充当流处理器,使用一个或多个主题的输入流,并生成一个或多个输出主题输出流,从而有效地将输入流转换为输出流;
  • Connector API:允许构建和运行将 Kafka 主题连接到现有应用程序或数据系统的可重用生产者或使用者。

3 Kafka 优势

  • 高吞吐量:单机每秒处理几十上百万的消息量,即使存储了 TB 级以上的消息,它也能保持稳定的性能
  • 性能:但节点支持上千个客户端,并保证零停机和零数据丢失;
  • 持久化数据存储:将消息持久化到磁盘。通过将数据持久化到磁盘以 replication 防止数据丢失;
  • 分布式系统,易于扩展。所有的 Producer、broker 和 Consumer 都会有多个,均为分布式的。无需厅级即可扩展机器。多个 Producer、Consumer 可能是不同的应用。
  • 可靠性:Kafka 是分布式,分区、复制和容错的。
  • 客户端状态维护:消息被处理的状态是在 Consumer 端维护,而不是由 server 端维护。当失败时能自动平衡。
  • 支持 Online 和 offline 场景。
  • 支持多种客户端语言。

4 Kafka 应用场景

  • 日志收集
  • 消息系统
  • 用户活动追踪
  • 运营指标
  • 流式处理

相关文章

# 前言 现有主流消息中间件都是生产者-消费者模型,主要角色...
错误的根源是:kafka版本过高所致,2.2+=的版本,已经不需要...
DWS层主要是存放大宽表数据,此业务中主要是针对Kafka topic...
不多BB讲原理,只教你怎么用,看了全网没有比我更详细的了,...
终于写完了,其实最开始学kafka的时候是今年2月份,那时候还...
使用GPKafka实现Kafka数据导入Greenplum数据库踩坑问题记录(...