一个互动类的论坛的帖子评论处理场景,要求每个帖子的评论请求操作都必须要严格遵循一定的顺序(比如可能会有评论删除、引用评论、回复评论等操作,所以请求顺序必须要严格按照顺序处理),帖子评论的操作请求发送到kafka里面,然后评论服务消费kafka处理各个请求,这个评论消费者服务消费太慢,需要提升下并发效率。增加分片与消费者数量
因为消费者拉取消息需要提供offset, limit。如果offset放在broker端,那么一定会产生额外的通信开销;如果offset放在Consumer端,如果在一个组有多个消费者,就需要有一个协调者,集中式的管理,解决锁冲突,如果不解决冲突,那么势必会产生重复消费、无用的消费,从而导致资源浪费。 所以说,从性能与复杂度的取舍上,Kafka采用了相对简单的一种解决策略。
这里采用自定义分区策略,因为每个评论操作请求中都携带有一个原始帖子ID字段,所以分发策略也很简单,直接帖子ID % 分片数将消息进行分发,这样同一个帖子ID的评论操作就都可以到同一个分片中,这样顺序的问题就解决了。
- 轮询分区策略
- 随机分区策略
- 按key分区分配策略
- 自定义分区策略
这个地方是整个方案里面我自己不太满意的一个实现,属于迁就现实的一种妥协方案,写这篇文档的时候,自己还是打算近期将这部分按照一个更优的方案进行实现。如果您也有兴趣了解或者有更好的建议思路,欢迎联系我,我们一起掰扯下。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |