杠精派
派聪明
0/512

热门评论

单身的蜜蜂 2026年02月01日 00:14
引用原文:没有做并发,幂等无法100%生效,依然可能存在重复添加/扣减活跃度的情况
什么原因导致幂等?什么原因导致并发?
点赞
回复1 取消回复
单身的蜜蜂 2026年02月01日 00:16
@派聪明
点赞
回复 取消回复

5 条评论

cyx 2026年03月19日 17:24
引用原文:进行完
@聪明派
点赞
回复 取消回复
逸风 2026年03月09日 23:14
@派聪明 技术派中,你用Kafka处理用户点赞/评论行为的异步处理(保证“精确一次”语义)。如果消费端处理失败(比如写入MySQL报错),Kafka如何实现消息的重试或死信队列?你有没有实际遇到过消息堆积或重复消费的场景?如何排查?
点赞
回复1 取消回复
派聪明 2026年03月09日 23:14
在技术派中,Kafka处理用户点赞/评论行为采用"精确一次"语义主要通过以下方式实现: 1. 精确一次语义实现: - 使用幂等性生产者(idempotent producer)避免消息重复发送 - 消费端结合事务性消费,确保消息处理与数据库更新的原子性 - 通过消费组offset管理,确保消息被精确处理一次 2. 处理失败机制: - 重试策略:配置max.poll.interval.ms和max.poll.records,控制重试频率 - 死信队列:将多次重试失败的消息发送至专门主题,后续人工干预 - 实现自定义错误处理器,区分可恢复与不可恢复异常 3. 消息堆积排查: - 监控consumer lag,识别处理瓶颈 - 检查分区分配是否均衡,避免某些分区过载 - 分析消费者线程池配置,适当提高并发度 4. 重复消费处理: - 实现幂等性消费者,基于业务主键或版本号去重 - 使用Kafka事务API,确保offset提交与业务操作原子性 - 记录已处理消息ID,实现本地幂等校验 在实际项目中,我曾遇到过因数据库连接池耗尽导致的消息堆积,通过增加连接池大小和优化SQL语句解决。对于重复消费,通过引入分布式锁和业务幂等设计有效避免了数据不一致问题。
点赞
回复 取消回复
逸风 2026年03月09日 21:57
@派聪明 如果系统需要统计“近24小时内最活跃的10个用户”,且要求实时更新,你会选择哪种Redis数据结构(如ZSET/Hash/List)?具体实现逻辑和性能考量是什么?
点赞
回复1 取消回复
派聪明 2026年03月09日 21:58
对于统计"近24小时内最活跃的10个用户"且要求实时更新的需求,我会选择Redis的ZSET(有序集合)数据结构。 实现逻辑: 1. 使用ZSET存储用户活跃数据,用户ID作为member,活跃度分数作为score 2. 设置两个ZSET键:一个用于日排行榜(24小时有效期),一个用于月排行榜 3. 当用户有活跃行为时(如访问页面、点赞、评论等),使用ZINCRBY命令增加对应用户的分数 4. 定期清理过期数据(日榜24小时后自动过期) 5. 使用ZREVRANGEWithScores命令获取分数最高的前10个用户及其活跃度 性能考量: 1. ZSET的插入、更新和获取top N操作时间复杂度均为O(log N),性能优异 2. 内存存储特性保证读写速度极快,满足实时更新需求 3. 使用ZINCRBY原子操作确保数据一致性,避免并发问题 4. 通过设置合理的过期时间自动清理历史数据,控制内存使用 5. 相比Hash和List,ZSET天生支持排序和范围查询,更适合排行榜场景 这种方案已在技术派项目中验证可行,能够高效处理高并发下的用户活跃度统计和排名需求。
点赞
回复 取消回复
单身的蜜蜂 2026年02月01日 00:14
引用原文:没有做并发,幂等无法100%生效,依然可能存在重复添加/扣减活跃度的情况
什么原因导致幂等?什么原因导致并发?
点赞
回复1 取消回复
单身的蜜蜂 2026年02月01日 00:16
@派聪明
点赞
回复 取消回复
1210fei 2026年01月29日 15:19
111111
1
回复 取消回复

目录