Kafka(Java面试题)

一、什么是Kafka?

Kafka是一个分布式消息中间件,高性能、持久化、多副本备份、横向扩展能力,一个典型的Kafka集群包含若干Producer,若干Broker,若干Consumer,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举Leader,以及在Consumer Group发送变化时进行Rebalance(负载均衡)。Producer 使用push(推)模式将消息发布到Broker;Consumer 使用pull(拉)模式从Broker订阅并消费消息。

名词
Producer:发布消息时指定Topic
ZooKeeper:生产者消费者broker都注册上来
Broker
Consumer :只能订阅一个Topic
Consumer Group:一个组的消费者只能消费一条记录
Producee Group:
Topic:一个Topic可以分布在多个Broker上,
partition:一个Topic有多个partition,一个partition由多个消息组成,每个消息都有一个偏移量去确定消息的位置
Offset记录着下一条将要发送给Consumer的消息的序号
partition是消息还是队列?Topic下有多少个队列?四个?
Offset:偏移量,代表消息的位置信息
LEO:日志结束位,每个分区副本中最大的Offset+1
HW :高水位,可消费的消息位置+1
ISR:所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR
OSR:与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR

https://www.cnblogs.com/windpoplar/p/10747696.html
https://www.cnblogs.com/aidodoo/p/8873163.html

LEO(Last end offset) 记录了该副本底层日志中的下一条消息的offset,例如LEO为10,那么当前的offset为9
HW (High water)标记着可消费的消息,对于同一个副本而言HW不会大于LEO,小于等于HW的消息将会被认为是已备份的

producer将消息发送到该partition的leader上,leader会把消息写入其本地log,每个follower都从leader pull数据。在follower收到消息并且将消息写入本地log之后会向leader发送ack,一旦leader收到了ISR中所有replica的ACK,该消息就被认为已经commit了,leader会增加HW并向producer发送ACK
producer 只能往 leader 分区上写数据(读也只能从 leader 分区上进行

每条消息都有一个唯一的偏移量,用于标识它在当前分区日志中的位置

Kafka集群中有4个broker, 某topic有3个partition,且复制因子即副本个数也为3:

kafka中Zookeepr的作用
https://www.jianshu.com/p/a036405f989c

、Kafka的副本机制

每个
如上图所示,kafaka集群的 broker,和 Consumer 都需要连接 Zookeeper。
Producer 直接连接 Broker。

Kafka通过Zookeeper管理集群配置,选举Leader,以及在Consumer Group发送变化时进行Rebalance(负载均衡)。Producer 使用push(推)模式将消息发布到Broker;Consumer 使用pull(拉)模式从Broker订阅并消费消息。

一、什么是Kafka?

Kafka是一个具有高性能持久化多副本备份横向扩展能力的分布式消息中间件。一个典型的Kafka集群包含多个Producer,多个Broker,多个Consumer,以及一个Zookeeper集群。Consumer和Broker注册到ZK上进行统一管理,Producer直接和Broker进行连接。
在Kafka中一个Broker可以有多个Topic,一个Topic可以有多个partition,一个partition有多个副本备份,一个消费者只能绑定一个Topic,可以消费多个不同的partition。
生产者向指定主题推送消息,通过轮询或者随机或者对key进行Hash运行的方式追加到主分区中,备分区定时向主分区拉取已提交的数据进行复制,消费者主动向Topic拉取消息。
如果主分区副本挂掉,那么就会从从分区副本中选出一个主分区,写入新的消息,如果从分区同步速度太慢超过阈值或者同步错误就会被踢出ISR(副本同步队列,可用的主分区和从分区的集合),存入OSR,新加入的follower也会先存放在OSR中,AR=ISR+OSR。AR是指定分区所有副本的集合
对于leader新写入的消息,consumer不能立刻消费,leader会等待该消息被所有ISR中的replicas同步后更新HW,此时消息才能被consumer消费。这样就保证了如果leader所在的broker失效,该消息仍然可以从新选举的leader中获取。

HW俗称高水位,是HighWatermark的缩写,取一个partition对应的ISR中最小的LEO作为HW
问题
幂等性
顺序性
事务
一个partition只能被一个消费者消费,那是不是消费者没消费完之前,另一个消费者不会去消费消息?

轮询策略
随机策略
按key分区策略

所谓同步,必须满足如下两个条件:

副本节点必须能与zookeeper保持会话(心跳机制)
副本能复制leader上的所有写操作,并且不能落后太多

什么是内存队列?

你可能感兴趣的:(面试题总结)