kafka
面试角度看kafka
取材于微信公众号《码哥字节》。
讲一讲分布式消息中间件
什么是分布式消息中间件
分布式消息是一种通信机制,与RPC、HTTP、RMI等不一样,消息中间件采用分布式中间代理的方式进行通信。如上图所示,采用了消息中间件之后,上游业务系统发送消息,先存储在消息中间件,让然后右消息中间件将消息分发到对应的业务模块应用(分布式生产者–消费者 模式)。这种异步方式,减少了服务之间的耦合度。
消息中间件的作用
在系统架构中引用额外的组件,必然会提高系统的架构复杂度和运维的难度。那么使用分布式消息中间件有什么优势?消息中间件在系统中又起什么作用?
- 解耦
- 数据冗余
- 扩展性
- 削峰
- 可恢复性
- 顺序保证
- 缓冲
- 异步通信
消息中间件的使用场景是什么?异步通信,消息存储处理。
消息中间件选型?语言,协议、HA、数据可靠性、性能、事务、生态、简易、推拉模式。
kafka基本概念和架构
kafka架构中的一般概念:
Producer
:生产者。也就是消息发送的一方。生产者负责创建消息,然后将其发送到kafka。Consumer
:消费者。也就是接收消息的一方。消费者连接到kafka上接收消息,然后对消息进行处理。Consumer Group
:一个消费者组可以包含一个或多个消费者。使用多分区 + 多消费者方式能极大的提高数据下游的处理速度,同一消费组不会重复消费消息;同样的,不同消费组中的消费者消费消息时是互不影响的。kafka就是通过消费组的方式实现消息P2P模式和广播模式。Broker
:服务代理节点。Broker是kafka的服务节点,即kafka的服务器。Topic
:Kafka中的消息以Topic为单位进行划分,生产者将消息发送到特定的Topic,而消费者负责订阅Topic的消息进行消费。Partition
:Topic是一个逻辑概念,它可以区分为多个分区,每个分区只属于单个主题。同一主题下不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。Replication
:副本
。是kafka保证数据高可用的方式,kafka同一partition的数据可以在多个broker上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在broker崩溃或发生网络异常时,kafka会在Controller的管理下重新选择新的Leader副本对外提供读写服务。Record
:实际写入kafka中并可以被读取的消息记录。每个record包含了key
、value
、timestamp
。kafka Topic Partition (offset) Layout:
kafka将topic进行分区,分区可以并发读写。
Kafka Consumer Offset:
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后支持
分区数是否可以减少
不可以,不然会丢失数据