大数据实时计算---Kafka介绍(下)

本文深入介绍了Kafka的核心概念,包括Producer、Consumer、Topic、Partition和Offset。Kafka保证了分区内的消息顺序,提供高吞吐和快速响应。文章详细阐述了Kafka的消息分发、存储机制、副本策略、Consumer Group和Partition的分配策略,以及其高性能背后的PageCache和sendfile技术。此外,还讨论了Consumer的消费流程和重新平衡机制,以及Kafka的部署与监控工具。
摘要由CSDN通过智能技术生成

kafka基本概念介绍

架构图如下
在这里插入图片描述

  • Producer
    消息生产者, 就是向 kafka broker 发消息的客户端。

  • Consumer
    消息消费者, 向 kafka broker 取消息的客户端

  • Topic
    在kafka中,一个topic就是一个队列,topic由一个或多个分区组成,分区分布在kafka个节点上。分区由顺序得,不变得消息队列组成,已经存在得消息不能更改,新写入得消息追加到最后面。每个分区均会存在对应得持久化文件和索引文件。
    在这里插入图片描述
    和传统得消息队列不同,Kafka中的消息不会再消费后就被删除,相反他们存可配置的过期时间,到了时间就由kafka定时清除。
    Kafuka的consumer需要寻访消息的消费偏移量(offset),因此重置偏移量将能够调整消费的消息。Kafka引入分区有这个设计的优势是:

    • topic的容量不受单台服务器的容量大小限制
    • 并发新能更好
    • 调度分布策略灵活

    如上图,分区分布在整个kafka集群的所有服务器上,每个服务器节点基于分区处理的数据和请求,每个分区可以由多个副本容错。

  • Consumer Group (CG)
    这是 kafka 用来实现一个 topic 消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer) 的手段。 一个 topic 可以有多个 CG。 topic 的消息会复制(不是真的复制, 是概念上的) 到所有的 CG, 但每个 partition 只会把消息发给该 CG 中的一个consumer。 如果需要实现广播, 只要每个 consumer 有一个独立的 CG 就可以了。 要实现单播只要所有的 consumer 在同一个 CG。 用 CG 还可以将 consumer 进行自由的分组而不需要多次发送消息到不同的 topic。

  • Partition
    为了实现扩展性, 一个非常大的 topic 可以分布到多个 broker( 即服务器) 上, 一个topic 可以分为多个 partition, 每个 partition 是一个有序的队列。 partition 中的每条消息都会被分配一个有序的 id(offset) 。 kafka 只保证按一个 partition 中的顺序将消息发给 consumer, 不保证一个 topic 的整体(多个 partition 间) 的顺序。

  • Offset
    kafka 的存储文件都是按照 offset.kafka 来命名, 用 offset 做名字的好处是方便查找。 例如你想找位于 2049 的位置, 只要找到 2048.kafka 的文件即可。 当然 the first offset 就是00000000000.kafka.

  • leader
    每个 Replication 集合中的 Partition 都会选出一个唯一的 Leader, 所有的读写请求都由Leader 处理。 其他 Replicas 从 Leader 处把数据更新同步到本地, 过程类似大家熟悉的 MySQL中的 Binlog 同步。 每个 Cluster 当中会选举出一个 Broker 来担任 Controller, 负责处理 Partition的 Leader 选举, 协调 Partition 迁移等工作。

  • ISR(In-Sync Replica)
    是 Replicas 的一个子集, 表示目前 Alive 且与 Leader 能够“Catch-up” 的Replicas 集合。 由于读写都是首先落到 Leader 上, 所以一般来说通过同步机制从 Leader 上拉取数据的 Replica 都会和 Leader 有一些延迟(包括了延迟时间和延迟条数两个维度), 任意一个超过阈值都会把该 Replica 踢出 ISR。 每个 Partition 都有它自己独立的 ISR。

Kafka的消息分发

分发的完整性

Producer 客户端负责消息的分发

  • kafka 集群中的任何一个 broker 都可以向 producer 提供 metadata 信息,这些 metadata 中包含"集群中存活的 servers 列表"/"partitions leader 列表"等信息;
  • 当 producer 获取到 metadata 信息之后, producer 将会和 Topic 下所有 partition leader 保持socket 连接;
  • 消息由 producer 直接通过 socket 发送到 broker, 中间不会经过任何"路由层", 事实上, 消息被路由到哪个 partition 上由 producer 客户端决定;
    比如可以采用"random"“key-hash”"轮询"等,如果一个 topic 中有多个partitions,那么在producer 端实现"消息均衡分发"是必要的。
  • 在 producer 端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值