【面试官】你说说消费者手动提交和自动提交有什么区别?
- 面试官:你先说说Kafka由什么模块组成?
- 面试官:那分区有什么作用?
- 面试官:消息生产者的异步回调,知道吧?
- 面试官:你说说消费者手动提交和自动提交有什么区别?
- 面试官:那它们都有什么优、缺点?
大家好,我是南哥。
一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。
文章目录
- Kafka概念
- Kafka组成模块
- 分区
- 异步回调
- 消费者消息提交
- 提交消息的方式
- 提交方式的优缺点
1. Kafka概念
1.1 Kafka组成模块
面试官:你先说说Kafka由什么模块组成?
Kafka其实是一款基于发布与订阅模式的消息系统,如果按常理来设计,大家是不是把消息发送者的消息直接发送给消息消费者?但Kafka并不是这么设计的,Kafka消息的生产者会对消息进行分类,再发送给中间的消息服务系统,而消息消费者通过订阅某分类的消息去接受特定类型的消息。
其实这么设计的目的也是为了满足大量业务消息的接入,要是单一的消息发送和接收,那开个进程的管道通信就可以了。另外如果大家对设计模式的发布/订阅模式熟悉的话,对Kafka的设计理念会更容易理解。
总的来说,Kafka由五大模块组成,大家要理解好这些模块的功能作用:消息生产者、消息消费者、Broker
、主题Topic
、分区Partition
。
(1)消息生产者
消息生产者是消息的创造者,每发送一条消息都会发送到特定的主题上去。
(2)消息消费者
消息生产者和消费者都是Kafka的客户端,消息消费者顾名思义作为消息的读取者、消费者。同时Kafka很灵活的一点是,一个消费者可以订阅多个主题,而且一个主题消息也可被不同消息分组的多个消费者处理。这就给我们变化多端的业务设计带来了众多可能性了,方便大家自由发挥。
(3)Broker
孤零零部署在Linux的Kafka服务器被称为Broker
,也就是我上文提到的中间的消息服务系统
,大家不要小瞧他,单台Broker可以轻松处理每秒百万级的消息量。Broker日常工作内容就是接收消息生产者的消息,为每条消息设置偏移量,最后提交到磁盘进行持久化保存。
(4)主题Topic
上文我们知道Kafka的消息是有分类的,而分类的标识就是主题Topic
。大家可以看下具体代码落地会更容易理解,消息生产者Producer
发送给clock-topic
主题,消息消费者监听消费clock-topic
主题下的消息。
// 消息生产者
public class Producer implements ApplicationRunner {
@Resource
private RedissonClient redissonClient;
@Resource
private KafkaTemplate<String, String> kafkaTemplate;
@Override
public void run(ApplicationArguments args) throws Exception {
RBlockingQueue<Clock> blockingFairQueue = redissonClient.getBlockingQueue("delay_queue");
while (true) {
Clock clock = blockingFairQueue.take();
kafkaTemplate.send("clock-topic", "key", clock.toString());
log.info("time out: {} , clock created: {}", new
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!