黄庭坚
如果此时记录存储程序所在的机房被删库跑路了,上面的这个流程会发送什么问题?
面对庞大的请求量,处理订单的服务一脸茫然,它的命运该何去何从?
对于这个流程应该怎么优化来挽回这个暴躁的用户?
1.png
2.png
创建集群 --> 新增 Topic --> 编写生产者逻辑 --> 编写消费者逻辑
3.png
Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。
4.png
每个分片有多个Replica,Leader Replical将会从ISR中选出。
5.png
6.png
7.png
ZooKeeper:负责存储集群元信息,包括分区分配信息等
8.png
从一条消息的视角,看看为什么Kafka 能支持这么高的吞吐?
思考:
9.png
如果发送一条信息,等到其成功后再发一条会有什么问题?
10.png
批量发送可以减少IO次数,从而加强发送能力
可是出现了新的问题:如果消息量很大,网络带宽不够用,如何解决?
例如:我当前的服务器向前端展示一条视频,但是服务器的带宽(网速)不够怎么办?
11.png
通过压缩,减少消息大小,目前支持Snappy、Gzip、LZ4、ZSTD压缩算法
之前默认使用Snappy
目前通过测试的得出ZSTD是最好的也是最普遍的
推荐使用ZSTD的压缩算法
12.png
数据路径:/Topic/Partition/Segment/(log | index | timeindex | ...)
移动磁头转到对应的磁道,磁盘转动,找到对应扇区,最后写入。寻道成本比较高,因此顺序写可以减少寻道所带来的时间成本。
13.png
14.png
采用顺序写的方式进行写入,以提高写入效率
Consumer 通过发送 FetchRequest 请求消息数据,Broker会将指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer,寻找数据这个细节是如何做到的呢?
15.png
目标:寻找Offset = 28
16.png
二分找到小于目标offset的最大文件。
17.png
二分找到小于目标时间戳最大的索引位置,再通过寻找offset的方式找到最终数据。
18.png
19.png
20.png
21.png
如何解决Partition在Consumer Group中的分配问题?
通过手动进行分配,哪一个Consumer消费哪一个Partition完全由业务来决定。
22.png
思考一下,这种方式的缺点是什么?
23.png
Rebalance?
24.png
25.png
26.png
27.png
28.png
哪一些可以帮助Kafka提高吞吐或者稳定性的功能?
29.png
30.png
31.png
思考:替换、扩容,缩容的流程应该是怎样的?
32.png
兼容Kafka协议,存放分离,云原生消息队列
BMQ架构图
34.png
随机选择一定数量的DataNode 进行写入
35.png
Kafka
BMQ
38.png
保证对于任意分片在同一时刻只能在一个Broker上存活
39.png
40.png
如果DataNode 节点挂了或者其他原因导致我们写文件失败,应该如何处理?
41.png
42.png
43.png
开发流程
44.png
45.png
多个人同时测试,需要等待上一个人测试完成
46.png
每多一个测试人员,都需要重新搭建一个相同配置的Topic,造成人力和资源的浪费。
47.png
对于PPE的消费者来说,资源没有生产环境多,所以无法承受生成环境的流量。
48.png
解决主干泳道流量隔离问题以及泳道资源重复创建问题。
49.png
直接使用原生SDK会有什么问题?
50.png
51.png
思考一下,我们是否可以通过多机房部署的方式,解决跨Region读写的问题?
52.png
使用Mirror通过最终一致的方式,解决跨Region读写问题
53.png
如果希望通过写入的LogId、UserId或者其他的业务字段进行消息的查询,应该怎么做?
54.png
直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query 服务读出数据。
Apache Parquet是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop生态圈中大多数计算框架(Hadoop、Spark等),被多种查询引擎支持(Hive、Impala、Drill等)。
55.png
56.png
57.png
直接在BMQ中将数据结构化,通过Parquet Engine,可以使用不同的方式构建Parquet格式文件。
例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等
58.png
59.png
60.png
61.png
RocketMQ的高级特性有哪些?
62.png
63.png
64.png
65.png
66.png
该如何处理失败的消息?
68.png