本月,HStreamDB 团队次要在进行 v0.9 的最初开发和公布筹备工作,对 v0.9 行将带来的 stream 分区模型改良、新集群机制、HStream IO 等新个性进行了进一步的欠缺和测试,同时也将次要的客户端降级到适配 v0.9。
Stream 分区模型改良
在之前版本中,HStreamDB 采纳通明分区模型,每个 stream 内的分区数是依据写入负载的状况动静调整的,且 stream 外部的分区对用户不可见。这种模型的劣势在于放弃用户概念简略性的同时也保留了实现的灵活性,可能做到随负载动静伸缩分区数量,且在伸缩过程中放弃须要的数据程序性。
以后这一模型的次要毛病在于用户无奈间接进行分区级的操作和精细化管制,比方无奈间接从任意地位读取某个分区的数据。为此,咱们决定将凋谢分区的操作和控制能力给到用户,使用户能够:
- 通过
partitionKey
控制数据在分区之间的路由 - 间接从指定地位读取任意 shard 的数据
- 手动管制 stream 内分区的动静伸缩
在实现上,HStreamDB 采纳的是 key-range-based 分区机制,stream 下的所有 shard 独特划分整个 key space,每个 shard 归属一段间断的子空间(key range),shard 的扩大与膨胀对应子空间的决裂与合并。同时分区的伸缩不会造成老数据的复制和迁徙,而是引起父分区的关闭,新数据会主动进入子分区,但与此同时父分区的数据仍然是可读的。基于这种设计,分区的动静伸缩将会更加可控、疾速,而且不会带来因为老数据的重散布引起的低效和影响数据程序等问题,这理论也是通明分区的外部工作机制。
上述的分区模型改良将蕴含在行将公布的 v0.9 中(暂不蕴含管制分区决裂和合并的能力)。
HStream IO 更新
HStream IO 是 HStreamDB v0.9 行将公布一个外部数据集成框架,蕴含 source connectors、sink connectors、IO runtime 等组件,它可能实现 HStreamDB 和多种内部零碎的互联互通,从而助力促成数据在整个企业数据栈内的高效流转以及实时价值开释。
继上月咱们新增了对多个数据库的 cdc source 反对后,本月咱们新增了对 MySQL 和 PostgreSQL 的 sink connector 反对,另外也对 embbed IO runtime 在 connector 参数查看、配置文档生成以及工作平安退出等方面进行了改良和加强,同时也提供了 SQL commands 不便用户通过 CLI 创立和治理 IO task,示例如下:
create source connector source01 from mysql with ("host" = "127.0.0.1", "port" = 3306, "user" = "root", "password" = "password", "database" = "d1", "table" = "t1", "stream" = "stream01");
create sink connector sink01 to postgresql with ("host" = "127.0.0.1", "port" = 5432, "user" = "postgres", "password" = "postgres", "database" = "d1", "table" = "t1", "stream" = "stream01");
show connectors;
pause connector source01;
resume connecctor source01;
drop connector source01;
HStream MetaStore
目前 HStreamDB 应用 Zookeeper 存储系统内的元数据,比方 shard 的复制属性和集群节点的任务分配和调度信息等,这给 HStreamDB 的部署和运维带来了一些额定的复杂性,如部署须要依赖 JVM,要独自治理 Zookeeper 集群等。
为此,咱们打算移除 HStreamDB 对 Zookeeper 的间接依赖,并引入专门的 HStream MetaStore 组件(简称 HMeta)。HMeta 将提供一组形象的元数据存储接口,实践上可基于多种存储系统来实现。目前咱们正在开发提基于 rqlite [https://github.com/rqlite/rqlite] 的默认实现。rqlite 基于 SQLite 和 raft,采纳 Golang 编写,十分轻量,易于部署和治理。
HMeta 的开发工作还在继续进行中,如咱们之前 newsletter 中提到的,HServer 的新集群机制曾经不再依赖 Zookeeper,本月咱们也曾经实现了将 HStore 的 EpochStore 迁徙到 HMeta。这项个性将不会纳入行将公布的 v0.9 中,它还须要更多的测试,咱们打算在 v0.10 中正式公布它。
客户端更新
本月客户端也在适配 HStreamDB v0.9 方面带来了多项降级,以 hstreamdb-java 为例,次要蕴含以下改变:
createStream
可指定初始分区数- 减少
listShards
办法 producer
和bufferedProducer
适配新的分区模型- 减少
Reader
类,可用来读取任意分区
其它语言的客户端(Golang、Python)也将蕴含对 v0.9 的反对。
其它
本月实现的其它一些值得关注的个性包含:
- HServer 新增
advertised-listeners
配置,该配置用于解决 HStreamDB 部署在简单网络环境下时内部 client 拜访 HStreamDB 的问题。 - 改良了 HServer 集群启动时的 bootstrap 流程。
版权申明:本文为 EMQ 原创,转载请注明出处。
原文链接:https://hstream.io/zh/blog/hstreamdb-newsletter-202207