10、Kafka 消息订阅系统

1.Kafka 简介

Kafka 是一个高吞吐、分布式、基于发布订阅的消息系统,利用 Kafka 技术可在廉价 PCServer 上搭建起大规模消息系统。

Kafka 和其他组件比较,具有消息持久化、高吞吐、分布式、多客户端支持、实时等特性,适用于离线和在线的消息消费,如常规的消息收集、网站活性跟踪、聚合统计系统运营数据(监控数据)、日志收集等大量数据的互联网服务的数据收集场景。

下面介绍先大体介绍一下 Kafka 的主要设计思想,可以让相关人员在短时间内了解到 kafka 相关特性,如果想深入研究,后面会对其中每一个特性都做详细介绍。(1) Consumergroup:各个 consumer 可以组成一个组,每个消息只能被组中的一个 consumer 消费,如果一个消息可以被多个 consumer 消费的话,那么这些 consumer 必须在不同的组。

(2) 消息状态:在 Kafka 中,消息的状态被保存在 consumer 中,broker 不会关心哪个消息被消费了被谁消费了,只记录一个 offset 值(指向 partition 中下一个要被消费的消息位置),这就意味着如果 consumer 处理不好的话,broker 上的一个消息可能会被消费多次。

(3) 消息持久化:Kafka 中会把消息持久化到本地文件系统中,并且保持极高的效率。

(4) 消息有效期:Kafka 会长久保留其中的消息,以便 consumer 可以多次消费,当然其中很多细节是可配置的。

(5) 批量发送:Kafka 支持以消息集合为单位进行批量发送,以提高 push 效率。

(6) push-and-pull:Kafka 中的 Producer 和 consumer 采用的是 push-and-pull 模式,即 Producer 只管向 brokerpush 消息,consumer 只管从 brokerpull 消息,两者对消息的生产和消费是异步的。

(7) Kafka 集群中 broker 之间的关系:不是主从关系,各个 broker 在集群中地位一样,我们可以随意的增加或删除任何一个 broker 节点。

(8) 负载均衡方面:Kafka 提供了一个 metadataAPI 来管理 broker 之间的负载(对 Kafka0.8.x 而言,对于 0.7.x 主要靠 zookeeper 来实现负载均衡)。

(9) 同步异步:Producer 采用异步 push 方式,极大提高 Kafka 系统的吞吐率(可以通过参数控制是采用同步还是异步方式)。

(10)分区机制 partition:Kafka 的 broker 端支持消息分区,Producer 可以决定把消息发到哪个分区,在一个分区中消息的顺序就是 Producer 发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。分区的意义很重大,后面的内容会逐渐体现。

(11)离线数据装载:Kafka 由于对可拓展的数据持久化的支持,它也非常适合向 Hadoop 或者数据仓库中进行数据装载。

(12)插件支持:现在不少活跃的社区已经开发出不少插件来拓展 Kafka 的功能,如用来配合 Storm、Hadoop、flume 相关的插件。

2.Kafka 基本概念

一个典型的 Kafka 集群中包含若干 Producer(可以是 web 前端产生的 PageView,或者是服务器日志,系统 CPU、Memory 等),若干 Broker(Kafka 支持水平扩展,一般 broker 数量越多,集群吞吐率越高),若干 Consumer,以及一个 Zookeeper集群。Kafka 通过 Zookeeper 管理集群配置,选举 Leader,以及在 Consumer 发生变化时进行 rebalance。Producer 使用 push 模式将消息发布到 Broker, Consumer 使用 pull 模式从 Broker 订阅并消费消息。

(1) Broker:Kafka 集群包含一个或多个服务实例,这些服务实例被称为Broker

(2) Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为Topic。每条发布到 Kafka 的消息都有一个类别,这个类别被称为 Topic,也可以理解为一个存储消息的队列。例如:天气作为一个 Topic,每天的温度消息就可以存储在“天气”这个队列里。.

(3) Partition:Kafka 将 Topic 分成一个或者多个 Partition,每个 Partition在物理上对应一个文件夹,该文件夹下存储这个 Partition 的所有消息。每个 Topic 都有一个或者多个 Partitions 构成。每个 Partition 都是有序且不可变的消息队列。引入 Partition 机制,保证了 Kafka 的高吞吐能力。

Topic 的 Partition 数量可以在创建时配置。

Partition 数量决定了每个 Consumergroup 中并发消费者的最大数量。 ConsumergroupA 有两个消费者来读取 4 个 Partition 中数据;Consumergroup B 有四个消费者来读取 4 个 partition 中数据。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值