面试题:说一说kafka工作的流程?
相信大家读完本文就可以知道该如何回答了,首先我们先来了解下kafka分区, 分区(Partition)是最小的并行单位 一个消费者可以消费多个分区 、一个分区可以被多个消费者组里的消费者消费,但是,一个分区不能同时被同一个消费者组里的多个消费者消费。

发布-订阅模式:每个消费者都属于不同的消费者组

点对点(一对一) : 所有消费者都属于同一个消费者组

分区与消息顺序:同一个生产者发送到同一分区的消息,先发送的偏移量(offset)比后发送的offset小 同一个生产者发送到不同分区的消息,消息顺序无法保证。

分区与消费顺序:消费者按照消息在分区里的存放顺序进行消费的 Kafka只保证分区内的消息顺序,不能保证分区间的消息顺序。

1.设置一个分区,这样就可以保证所有消息的顺序,但是失去了拓展性和性能。
2.支持通过设置消息的key,相同key的消息会发送的同一个分区。
消息传递语义:
最多一次——消息可能会丢失,永远不重复发送
最少一次——消息不会丢失,但是可能会重复
精确一次——保证消息被传递到服务端且在服务端不重复
需要生产者和消费者共同来保证
生产者(至少一次)

生产者(至多一次)

精确一次 在Kafka 0.11.0 及之后的版本才实现
send() 异步发送

同步发送
Future<RecordMetadata> result = producer.send(new ProducerRecord<String, String>("mytopic", "" + (i % 5), Integer.toString(i)));
try {
RecordMetadata recordMetadata = result.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e){
e.printStackTrace();
}事务
Isolation_level 隔离级别
默认为: read_uncommitted 脏读
read_committed 读取成功提交的数据,不会脏读
下面举一个实例场景:
一个新用户注册成功之后、购买商品生成了一个订单,之后又取消了这个订单。 这些事件之间的顺序很重要。 Kafka 是不保证分区之间的顺序的。如果取消订单这条消息在注册用户或者购买商品之前,处理逻辑就会有问题。你们觉得问题出在哪?请继续下文

这种情况下。 为了保证消费顺秀,将所有事件放在同一 个主题的同一个分区中。因此使用用户 ID 作为分区的key,使它们位于相同分区。

最后聊一聊环境搭建:(二选一)

在公司有内外部网络隔离的情况下:

一小时的学习只能算是,初始Kafka,安装以及部署,以及简单的消息处理流程,后面还会有机会学习Kafka基础API,Kafka API高级特性,Kafka 架构进阶。
















