微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 应用场景

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐