基于H3Core分区的司机轨迹实时存储的技术方案

告别经纬度模糊聚合!用Uber H3 Java库实现六边形地理网格的5个实战场景 本文介绍了Uber H3 Java库在六边形地理网格中的5个实战场景,包括用户行为热力图、动态地理围栏、多层级区域分析等。通过H3的六边形网格系统,解决了传统经纬度聚合的边界模糊和计算量大问题,显著提升地理空间分析的精准度和效率。 阅读详情

1、背景

        由数据分析师提出的需求,需要分析每10s各个区域(颗粒度到H3Code 8级 面积约0.7平方公里)的司机分布情况,实现准实时的区域司机分布。

H3Code的概念可以参考以下博客:

Uber H3简单介绍_Scc_hy的博客-优快云博客一、什么是H3?将地球空间划分成可是识别的单元。将经纬度H3编码成六边形的网格索引。二、为什么用H3?2.1 GEOHASH存在一些不足不同精度下网格的形状不一且精度的变化幅度时小时大在不同维度的地区会出现地理单元单位面积差异较大的情况存在8邻域到中心网格的距离不相等问题2.2 H3的映射原理简述基于正多边形内角和公式( \theta=(x-2)*180 ), 和顶点和为360计算出,360/ y = (x-2)*180/x 所有y(正多边形个数), x的组合六边形因为边数最多,最接近https://blog.youkuaiyun.com/Scc_hy/article/details/120898390uber h3 地理编码_坦桑尼亚奥杜威峡谷能人的博客-优快云博客python 包:from h3 import h3def geth3(lon, lat, levelnum): h3_address = h3.geo_to_h3(lat, lon, levelnum) # 纬度,经度,地块级别 hex_center_coordinates = h3.h3_to_geo(h3_address) hex_boundary = h3.h3_to_geo_boundary(h3_address) return h3_addresslohttps://blog.youkuaiyun.com/l1159015838/article/details/115796715?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165072203416780271554412%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165072203416780271554412&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-29-115796715.142%5Ev9%5Econtrol,157%5Ev4%5Econtrol&utm_term=H3code+%E7%BA%A7%E5%88%AB&spm=1018.2226.3001.4187

2、技术架构

数据来源:Kafka

处理端:Springboot + 线程池

数据缓存:RedisCluster

定时调度: SpringScheduer + Redis分布式锁 

数据写入:Hbase

架构图如下:

3 数据处理流程

3.1 流程说明

流程说明”

  1. 消费kafka的司机轨迹数据
  2. 计算轨迹的H3Core,按照设计的一级缓存和二级缓存,采用pipeline写入Redis;
  3. 定时调度每分钟执行一次,采用Redis分布式锁保证调度的幂等,先获取二级索引,从而获取一级索引;
  4. 查询出值之后,写入Hbase环境,配置200条flush一次;

流程图如下:

待补充

3.2 Key的设计

3.1 Redis

一级索引设计:

key设计:{特定业务前缀:时间}:H3Core反转

{driver:202104271530}:3426776776

{order:202104271530}:4356557677

{ext:202104271530}:7686654564

value设计:(hash 格式)

key:司机id

value:kafka每条轨迹的详细信息

二级索引设计:

key设计: {特定业务前缀:时间yyyymmddhhMMss}:分片id

例:

{driver:202104271530}:1
{driver:202104271530}:2

.....................................

{driver:202104271530}:10

value: 一级索引的key

例:

3.2 Hbase

Rowkey设计

H3Core反转+日期yyyymmddhhMMss

列族设计(时间精确到每10s)分成三个 分别是 driver order ext

列分别是 列族:时间

例如:

司机:时间订单:时间其他附加信息:时间
driver:20220601123000order:20220601123000ext:20220601123000

4 考虑的一些细节

4.1 考虑RedisCluster、Hbase的数据倾斜

H3Core进行反转

4.2 考虑司机轨迹消息迟到太久的补偿

做了一个类似Flink水印的设计,超过定时调度的时间就直接push到kafka的补偿队列,补偿队列1小时处理一次;

4.3 考虑Redis性能,包括二级索引的是否分片、司机轨迹是否去重、采用pipeline的方式写入数据

1、二级索引分片:考虑到后期开城的数量越来越多、H3Core越来越多会导致Key越来越多,如果一个key里面存太多key

2、司机轨迹去重: 考虑到10s内司机的轨迹不会太大变化,去重可以提升计算速度和优化Hbase的存储空间,降到1/10(如果实在没办法再考虑,下策);

3、采用pipeline的方式写入数据:由于Kafka批量消费,所以里面会有不同司机的不同轨迹,所以会产生多个H3Core,因此会产生多个Key,这时采用pipeline管道写入,可以提升Redis的写入效率;

4.4 考虑kafka是否为了提高性能,是否允许极少部分数据丢失

允许自动offset,设置批量消费,kafka的配置

5 遇到的问题以及处理

5.1 RedisCluster的CPU和内存占用过高

分析原因:scan指令

解决方法:Redis的key的二级索引

5.2 处理端处理速度过慢,每分钟司机轨迹的处理速度需要30s,有安全隐患

分析原因:scan Redis集群上的key速度过慢,司机轨迹去重处理导致处理时间过长;

解决方法:采用二级索引存放Redis的key,Redis的数据格式,由原来的list改成hash,减少处理时间;

Uber H3: Uber’s Hexagonal Hierarchical Spatial Index 概述 Uber H3 H3是一个针对地球的空间划分和空间索引系统。 The H3 geospatial indexing system is a discrete global grid system consisting of a multi-precision hexagonal tiling of the sphere with hierarchical indexes. The hexagonal grid system is created on the planar faces of a 阅读详情

相关推荐

Uber开发的地图网格化的包h3

这里写自定义目录标题经纬度转h3地址h3地址获取对应六边形的中心 经纬度转h3地址 from h3.h3 import geo_to_h3 h3no = geo_to_h3(21.529882,110.728265,6) 输出 86410942fffffff h3地址获取对应六边形的中心 from h3.h3 import geo_to_h3 h3no = geo_to_h3(21.529882...

u013385018的专栏 5870

Uber H3 index 地图索引思考

H3 是 uber 设计的六边形空间索引,go 语言操作包是,可以通过经纬度获取所在的 h3 六边形边界,每个经纬度对应的六边形都是确定的,每个六边形唯一对应了一个 h3index。在业务开发中,我们可以通过 h3index 来对地理空间中的对象做聚合,本质还是将经纬度查询转换成了 h3index 的查询。

小知识折射大智慧 6995

出海车联网平台搭建实战:从MQTT接入到实时监控

车联网平台的核心在于将分散的车辆接入云端,实现状态采集、位置追踪与远程控制。在技术实现上,MQTT协议凭借轻量、低功耗和弱网适应能力,成为车辆数据上报的主流通道。结合Spring Boot服务端、Redis实时缓存和WebSocket推送,可以构建一套高响应的车辆远程监控系统。这一能力对于海外运营尤其重要——当国产电动车批量进入中亚等市场时,运营方需要实时掌握车辆位置、电池状态、超速告警等信息,以降低管理成本并满足当地数据合规要求。本文从架构设计、设备模拟、消息解析、告警逻辑到历史轨迹查询,完整梳理了一套可

weixin_34208283的博客 324

uber h3地图网格,点,区域获得六边形网格,java客户端

uber h3地图网格,点,区域获得六边形网格,java客户端

lpg432的博客 3488

网约车大数据分析实战:基于Spark的数据处理、建模与性能调优

大数据处理的核心在于如何高效、可靠地从海量数据中提取价值。Apache Spark作为主流的分布式计算框架,凭借其内存计算、批流一体和丰富的生态,成为处理复杂业务场景的首选。其技术价值在于能够将数据处理的性能提升数个量级,同时通过SQL、DataFrame等高级API降低开发门槛。在应用场景上,Spark尤其适合处理像网约车这类数据规模大、实时性要求高、分析维度多的业务,例如进行供需分析、用户画像和需求预测。本文以网约车大数据分析项目为例,深入剖析了如何利用Spark构建从数据采集、实时处理、ETL清洗到机

diaoqu4574的博客 408

基于Flink+Kafka+Hadoop+Hive构建智能物流大数据平台实战

大数据处理架构是现代企业应对海量数据挑战的核心技术。其基本原理是通过分布式系统将数据采集、存储、计算与分析解耦,形成高效的数据流水线。Lambda架构等技术价值在于能同时满足实时流处理和离线批处理的需求,为业务决策提供即时洞察与深度分析。在物流、电商、金融等实时性要求高的应用场景中,这种架构能有效处理订单、轨迹等时序数据。本文聚焦于智能物流领域,详细阐述了如何整合Apache Flink进行实时计算、Kafka作为消息队列、Hadoop HDFS用于海量存储以及Hive进行离线分析,构建一个从数据采集到可视

aofan9566的博客 427

JT/T 808 部标车辆监控平台实战(第 1 篇 · 业务与架构)

业务是 CPU + DB 密集,要的是吞吐。:一个 jt-server 装下全部业务,按四个域组织:基础域(档案/组织树)、核心域(轨迹/监控/报警/围栏)、动作域(指令/视频/推送)、外延域(开放 API/报表/车务/转发)早期网关和业务同进程,一次发版重启,几千台终端同时重连 + 补鉴权,瞬间把服务打挂,挂了就再重连,恶性循环。:三个协议网关(808/1078/809)、业务服务 jt-server、协议契约模块 jt-core、编解码 jar jt-codec——这些是平台的心脏,全部自己写。

xichji的专栏 318

GPU加速的时空分析数据库AresDB原理与实战

GPU数据库是一种将并行计算卸载至图形处理器以突破CPU计算瓶颈的新型OLAP引擎,其核心原理在于利用GPU高带宽内存(>700GB/s)与数千级线程并发能力,对列式数据执行谓词过滤、分组聚合及地理/时间窗口函数等计算密集型操作。相比传统CPU数据库,它在时空分析场景中展现出显著技术价值:尤其在高基数分组、地理围栏(如ST_Distance)、滑动时间窗口等embarrassingly parallel任务上实现10~20倍性能提升。典型应用场景包括实时出行轨迹分析、IoT时序热力图、LBS用户行为下钻等需

weixin_30879169的博客 320

GPU数据库原理与实战:从AresDB看GPU加速实时分析

GPU数据库是一种将GPU显存作为主存储介质、面向大规模分析负载设计的新型数据库架构。其核心原理在于利用GPU高带宽显存(如GDDR6X达1TB/s)和Warp级并行能力,重构数据布局、查询编译与执行模型,从而突破CPU在数据搬运、分支预测和缓存一致性上的固有瓶颈。技术价值体现在毫秒级复杂聚合、单节点50万行/秒写入及显著降低TCO。典型应用场景包括实时轨迹分析、广告归因、IoT时序聚合等对低延迟与高吞吐有严苛要求的OLAP任务。本文以开源GPU-Powered Database AresDB为范例,深入解

weixin_34297704的博客 417

大模型能力迁移实战:从Grok 4到车载与军工系统的四层转化

大模型并非直接部署于边缘设备,其真实落地依赖‘能力迁移’这一核心范式——即通过知识蒸馏、硬件适配、安全加固与闭环验证,将通用AI能力转化为可嵌入汽车控制器或军用终端的确定性子模型。该过程本质是模型轻量化与系统可信化协同演进,关键技术包括监督微调(SFT)、INT16定点编译、TEE可信执行环境及置信度熔断机制。它广泛应用于智能驾驶规控策略生成、电子对抗战术推演等高可靠场景,尤其在特斯拉FSD V12.5和五角大楼JWICS系统中已形成标准化工程路径。本文聚焦能力萃取与硬件感知编译两大热词,揭示大模型如何跨越

aikenqiu5098的博客 501

【信息科学与工程学】【通信工程】第七十九篇 Infiniband网络02

管理员通过 SM 定义分区,指定其 P_Key 和期望的成员节点(CA/交换机端口)。2.

weixin_49199313的博客 381

基于Flink+Kafka+Hadoop+Hive的智能物流大数据平台实战

大数据技术栈是现代企业处理海量数据、实现实时洞察的核心引擎。其核心原理在于通过分布式架构,将数据采集、存储、计算与分析解耦,以应对高并发、低延迟的业务需求。在技术价值层面,它能够将传统批处理无法满足的实时监控、智能预测变为现实,极大地提升了业务决策的敏捷性与准确性。典型的应用场景包括电商实时推荐、金融风控和物联网设备监控。本文聚焦于物流行业,针对实时监控运单状态、预测运输时长与智能路线推荐等核心需求,详细阐述了如何整合Flink、Kafka、Hadoop和Hive等组件,构建一个集实时计算与离线分析于一体的

weixin_33766168的博客 400

【信息科学与工程学】【通信工程】【企业网、园区网、数据中心、广域网】各类业务网络及其网络演算算法

企业网络是一个复杂的系统,其业务、人员、流量和安全特征相互交织。下面这张表格梳理了这些核心特征及其关联的数学模型,帮你先建立整体概念。特征维度核心特征关联数学模型/方法业务特征​多样性、服务等级协议、混合云趋势图论(拓扑优化)、排队论(M/M/1)、随机过程(业务到达)、优化理论(资源调度)人员特征​角色权限差异、访问行为随机性、安全意识差异概率统计(行为建模)、随机过程(会话生成)、博弈论(安全策略)、访问控制矩阵流量特征​混合性、突发性、时空规律性、方向性(南北/东西向)泊松过程(短时突发)、重尾分布(

weixin_49199313的博客 888

自动驾驶世界模型:从潜空间编码到车载物理实现

世界模型是自动驾驶迈向预判式决策的核心技术,其本质并非新AI模型,而是融合感知、预测与物理约束的统一表征框架。它通过将多源传感器数据映射至可微分潜空间,实现对动态场景的时间连续建模,支撑3D高斯泼溅(3DGS)的几何先验注入与视觉语言动作(VLA)的语义理解。技术价值在于突破传统‘感知-预测-规划’流水线的信息断层,提升长尾场景泛化能力与功能安全可验证性。典型应用场景包括城市NOA中的鬼探头响应、施工区自适应预测及雨雾天气鲁棒控制。本文聚焦其在真实车载环境中的三层物理实现与动态潜空间编码机制。

weixin_33853794的博客 713

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 01

算法设计

weixin_49199313的博客 1500

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作02

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景301集合运算关系代数关系集合Feature Selection (Chi-Square)集合运算卡方检验目标函数:χ2=∑E(O−E)2​ 衡量分类特征与目标的相关性;资源:O(n·d);条件:离散特征,离散目标;组合约束:值越大相关性越强。 数据结构:列联表。 代码实现(C++): 特征列,目标列文本分类中的特征选择。302集合运算关系代数关系集合Feature Selection (ANOVA F

weixin_49199313的博客 309

面试与压测问题汇总

回答框架(STAR 法则):背景 (S): XX公司业务线众多(金融租赁、保险、营销、物流、发票等),每个迭代需要大量回归测试,手工执行效率低、覆盖不全。任务 (T): 负责设计和开发公司级的 API 自动化测试平台,覆盖多条业务线的接口回归、流程编排和版本对比。基于 Spring Boot + TestNG + llrunner 搭建分层架构设计 Component → Flow → Factory → TestCase 四层架构。

weixin_46921460的博客 554

YOLOv11n-seg 实战指南:从训练到模型部署的完整流程

本文提供了YOLOv11n-seg实例分割模型从环境准备、数据标注到模型训练、验证及最终部署的完整实战指南。详细讲解了如何准备多边形掩码数据、配置关键训练参数、解读分割核心评估指标,并重点介绍了将模型导出为ONNX等格式进行部署的流程与优化技巧,帮助开发者高效完成从开发到生产的全链路实践。

weixin_29062255的博客 554

探索地理数据的新维度:Uber 的 H3 系统

是 Uber 开源的一个高效、灵活的六边形网格系统,用于处理和可视化地理位置数据。它提供了一种全新的方式来组织、存储和查询地球表面的数据,特别是在大规模地理空间分析中,H3 显示出强大的性能。 ## 技术分析 ### 六边形网格 与传统的基于经纬度的数据结构相比,H3 使用了分层的六边形单元,每个六边形都可以无重叠地覆盖到地球表面。这种设计降低了边界效应,使得空间操作(如邻接、包含等)更简单...

gitblog_00096的博客 1548

宿舍网速跑不满?可能是PPPoE的锅!实测OpenWrt切换DHCP+深澜认证,轻松跑满校园百兆宽带

本文探讨了校园网PPPoE协议的性能瓶颈问题,并提供了通过OpenWrt路由器切换DHCP+深澜认证的技术方案,实测可显著提升网速至百兆宽带满速。文章详细介绍了配置步骤、性能对比及常见问题解决方案,帮助用户优化校园网体验。

weixin_31310913的博客 383

AU混响终极指南:从‘干声’到‘空间感’,用总音轨和发送技巧打造专业人声

本文详细介绍了如何在Adobe Audition(AU)中使用混响效果器,通过总音轨和发送技巧将‘干声’转化为具有专业‘空间感’的人声。从混响基础原理到总线架构设置,再到精细控制和自动化调整,全面解析了提升音频质量的实用技巧,适用于音乐制作、播客和内容创作。

weixin_30512089的博客 332
上一篇: Flink实战-(6)FlinkSQL实现CDC
下一篇: Kafka上的优化经验
CarsonBigData
博客等级 码龄9年 8315粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值