网易面试真题:讲讲 kafka 维护消费状态跟踪的方法?mysql
解析:大部分消息系统在 broker 端的维护消息被消费的记录:一个消息被分发到consumer 后 broker 就立刻进行标记或者等待 customer 的通知后进行标记。这样也能够在消息在消费后立马就删除以减小空间占用。
可是这样会不会有什么问题呢?若是一条消息发送出去以后就当即被标记为消费过的,一旦 consumer 处理消息时失败了(好比程序崩溃)消息就丢失了。为了解决这个问题,不少消息系统提供了另一个个功能:当消息被发送出去以后仅仅被标记为已发送状态,当接到 consumer 已经消费成功的通知后才标记为已被消费的状态。这虽然解决了消息丢失的问题,但产生了新问题,首先若是 consumer处理消息成功了可是向 broker 发送响应时失败了,这条消息将被消费两次。第二个问题时,broker 必须维护每条消息的状态,而且每次都要先锁住消息而后更改状态而后释放锁。这样麻烦又来了,且不说要维护大量的状态数据,好比若是消息发送出去但没有收到消费成功的通知,这条消息将一直处于被锁定的状态,Kafka 采用了不一样的策略。Topic 被分红了若干分区,每一个分区在同一时间只被一个 consumer 消费。这意味着每一个分区被消费的消息在日志中的位置仅仅是一个简单的整数:offset。这样就很容易标记每一个分区消费状态就很容易了,仅仅须要一个整数而已。这样消费状态的跟踪就很简单了。面试
Kafka是一种高吞吐量的分布式发布订阅消息系统,它能够处理消费者在网站中的全部动做流数据。 这种动做(网页浏览,搜索和其余用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据一般是因为吞吐量的要求而经过处理日志和日志聚合来解决。在大厂Kafka也是常常被问到的一个问题,我学习Kafka的时候也整理一些学习笔记,和收集了不少的面试真题,但愿可以对你们有必定的帮助。sql
如何获取 topic 主题的列表服务器
生产者和消费者的命令行是什么?网络
consumer 是推仍是拉?app
讲讲 kafka 维护消费状态跟踪的方法负载均衡
讲一下主从同步分布式
为何须要消息系统,mysql 不能知足需求吗?ide
Zookeeper 对于 Kafka 的做用是什么?学习
数据传输的事务定义有哪三种?
Kafka 判断一个节点是否还活着有那两个条件?
Kafka 与传统 MQ 消息系统之间有三个关键区别
讲一讲 kafka 的 ack 的三种机制
消费者故障,出现活锁问题如何解决?
如何控制消费的位置
kafka 分布式(不是单机)的状况下,如何保证消息的顺序消费?
kafka 的高可用机制是什么?
kafka 如何减小数据丢失
kafka 如何不消费重复数据?好比扣款,咱们不能重复的扣。
我整理的关于Kafka(含核心知识点以及思惟导图xmind):
Kafka 概念:
Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用Scala 语言编写,目前是 Apache 的开源项目。
broker:Kafka 服务器,负责消息存储和转发
topic:消息类别,Kafka 按照 topic 来分类消息
partition:topic 的分区,一个 topic 能够包含多个 partition,topic 消息保存在各个partition 上
offset:消息在日志中的位置,能够理解是消息在 partition 上的偏移量,也是表明该消息的惟一序号
Producer:消息生产者
Consumer:消息消费者
Consumer Group:消费者分组,每一个 Consumer 必须属于一个 group
Zookeeper:保存着集群 broker、topic、partition 等 meta 数据;另外,还负责 broker 故障发现,partition leader 选举,负载均衡等功能
Kafka 数据存储设计:
partition 的数据文件(offset,MessageSize,data)
数据文件分段 segment(顺序读写、分段命令、二分查找)
数据文件索引(分段索引、稀疏存储)
生产者设计:
负载均衡(partition 会均衡分布到不一样 broker 上)
批量发送
压缩(GZIP 或 Snappy)
消费者设计:
Consumer Group
因为题量较多,篇幅的限制,文章中的面试题分享没有所有附上详细的解析,但愿各位同仁理解
可是整理成了一份详细的PDF文档可分享给你们
领取方式:关注个人供种号(Java周某人)便可领取
近千道大厂面试题整理(PDF)带详细解析