kafka 三高架构设计剖析

Kafka 核心问题

  • 简单讲下 Kafka 的架构?

  • Kafka 是推模式还是拉模式,推拉的区别是什么?

  • Kafka 如何广播消息?

  • Kafka 的消息是否是有序的?

  • Kafka 是否支持读写分离?

  • Kafka 如何保证数据高可用?

  • Kafka 中 zookeeper 的作用?

  • 是否支持事务?

  • 分区数是否可以减少?

Kafka 架构中的一般概念:
架构

  • Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka。

  • Consumer:消费者,也就是接受消息的一方。消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处理。

  • Consumer Group:一个消费者组可以包含一个或多个消费者。使用多分区 + 多消费者方式可以极大提高数据下游的处理速度,同一消费组中的消费者不会重复消费消息,同样的,不同消费组中的消费者消息消息时互不影响。Kafka 就是通过消费组的方式来实现消息 P2P 模式和广播模式。

  • Broker:服务代理节点。Broker 是 Kafka 的服务节点,即 Kafka 的服务器。

  • Topic:Kafka 中的消息以 Topic 为单位进行划分,生产者将消息发送到特定的 Topic,而消费者负责订阅 Topic 的消息并进行消费。

  • Partition:Topic 是一个逻辑的概念,它可以细分为多个分区,每个分区只属于单个主题。同一个主题下不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。

  • Offset:offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序性而不是主题有序性。

  • Replication:副本,是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在 broker 崩溃或发生网络一场,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。

  • Record:实际写入 Kafka 中并可以被读取的消息记录。每个 record 包含了 key、value 和 timestamp。

Kafka Topic Partitions Layout
主题

Kafka 将 Topic 进行分区,分区可以并发读写。

Kafka Consumer Offset
consumer offset

zookeeper

zookeeper

  • Broker 注册:Broker 是分布式部署并且之间相互独立,Zookeeper 用来管理注册到集群的所有 Broker 节点。

  • Topic 注册:在 Kafka 中,同一个 Topic 的消息会被分成多个分区并将其分布在多个 Broker 上,这些分区信息及与 Broker 的对应关系也都是由 Zookeeper 在维护

  • 生产者负载均衡:由于同一个 Topic 消息会被分区并将其分布在多个 Broker 上,因此,生产者需要将消息合理地发送到这些分布式的 Broker 上。

  • 消费者负载均衡:与生产者类似,Kafka 中的消费者同样需要进行负载均衡来实现多个消费者合理地从对应的 Broker 服务器上接收消息,每个消费者分组包含若干消费者,每条消息都只会发送给分组中的一个消费者,不同的消费者分组消费自己特定的 Topic 下面的消息,互不干扰。

答案

简单讲下 Kafka 的架构?

Producer、Consumer、Consumer Group、Topic、Partition

Kafka 是推模式还是拉模式,推拉的区别是什么?

Kafka Producer 向 Broker 发送消息使用 Push 模式,Consumer 消费采用的 Pull 模式。拉取模式,让 consumer 自己管理 offset,可以提供读取性能

Kafka 如何广播消息?

Consumer group

Kafka 的消息是否是有序的?

Topic 级别无序,Partition 有序

Kafka 是否支持读写分离?

不支持,只有 Leader 对外提供读写服务

Kafka 如何保证数据高可用?

副本,ack,HW

Kafka 中 zookeeper 的作用?

集群管理,元数据管理

是否支持事务?

0.11 后支持事务,可以实现"exactly once"

分区数是否可以减少?

不可以,会丢失数据

往期推荐

<>

进字节了,Kafka 为什么这么快?
<>

<>

探秘 Kafka 的内部机制原理
<>

<>

图解Kafka消费者分区分配策略
<>

<>

刨根问底 Kafka,核心知识点大贯通
<>

<>

Kafka 核心全面总结,高可靠高性能核心原理探究
<>

相关推荐
技术路上的苦行僧2 小时前
分布式专题(8)之MongoDB存储原理&多文档事务详解
数据库·分布式·mongodb
龙哥·三年风水3 小时前
workman服务端开发模式-应用开发-后端api推送修改二
分布式·gateway·php
小小工匠3 小时前
分布式协同 - 分布式事务_2PC & 3PC解决方案
分布式·分布式事务·2pc·3pc
闯闯的日常分享5 小时前
分布式锁的原理分析
分布式
太阳伞下的阿呆6 小时前
kafka常用命令(持续更新)
分布式·kafka
Java程序之猿7 小时前
微服务分布式(二、注册中心Consul)
分布式·微服务·consul
龙哥·三年风水7 小时前
workman服务端开发模式-应用开发-后端api推送修改一
分布式·gateway·php
power-辰南8 小时前
Zookeeper 底层原理解析
分布式·zookeeper·云原生
power-辰南8 小时前
Zookeeper常见面试题解析
分布式·zookeeper·云原生
bug_null14 小时前
RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件
分布式·rabbitmq