平台|StarRocks VS ClickHouse,携程大住宿智能数据平台的应用( 五 )


不过这样做产生了一个问题:Kafka本身无法保证全局消息是有序的 , 只能保证partition内的有序性 。 同一个批次同一个订单 , 但订单状态不同的2条数据如果分别落在了不同的partition , routine load时无法保证哪条数据会先被消费 。 如果订单状态为取消的消息先被消费 , 而其他订单状态的消息后被消费 , 这样会造成原本应该取消的订单重新变成了非取消订单 , 从而影响统计的准确性 。
我们也考虑过不通过QMQ而改用原生的Kafka , 将订单号作为key来指定发送到哪个partition中 , 不过这样做需要二次开发 , 而且改动的成本也不低 。
为了解决这个问题 , 我们选择了一个折中的办法:在消息落地同时 , 又用明细模型落地了一个日志表 , 表里只需要存订单号、订单状态以及消息发送时间 。 同时 , 有一个定时任务每隔一段时间会对该表内相同订单号的数据进行排序 , 取消息发送时间最新的一条数据 , 用订单号与正式表中订单状态不一致的数据进行匹配然后进行更新 , 以这样的形式对数据进行一个补偿 。
T+1数据我们通过携程自研的数据同步平台Zeus进行ETL和导入:

平台|StarRocks VS ClickHouse,携程大住宿智能数据平台的应用
文章图片

DR和高可用
携程对DR有着很高的要求 , 每隔一段时间都会有公司级的DR演练 。 StarRocks本身已经具备了十分优秀的DR机制 , 在此基础之上 , 我们构建了一套适合自己的高可用体系:
·服务器分别部署在2个机房 , 以5:5的流量对外提供服务 。 对外提供服务的FE节点的负载均衡以配置项的形式实现 , 可以动态修改 , 实时生效(主要是考虑有服务器打补丁、版本升级等需要手动拉出的情况) 。
·每个FE和BE进程全部都用supervisor进行进程守护 , 保证进程出现意外退出时可以被自动拉起 。
·当FE节点出现故障时 , 存活的follower会立即选举出一个新的leader节点提供服务 , 但是应用端却无法立即感知 , 为了应对这种情况 , 我们起了一个定时任务 , 每隔一段时间对FE服务器进行health check , 一旦发现FE节点故障 , 则立即将故障节点拉出集群 , 同时以短信方式通知开发人员 。

平台|StarRocks VS ClickHouse,携程大住宿智能数据平台的应用
文章图片

【平台|StarRocks VS ClickHouse,携程大住宿智能数据平台的应用】·当BE节点出现故障时 , StarRocks内部会自动进行副本均衡 , 对外仍可继续提供服务 , 同时我们也会有一个定时任务对其进行health check , 每当发现有BE节点故障 , 则会以邮件形式通知开发人员 。

平台|StarRocks VS ClickHouse,携程大住宿智能数据平台的应用
文章图片

推荐阅读