要实现一个多维度的统计功能,比如说按时间,城市,性别,设备等维度进行统计。我调研了一下 kafka streams,能从 topic 中创建 stream,然后在 stream 上可以写 ksql 查询,但是 ksql 查询的结果还是 stream,没法直接放到 mysql 中进行统计报表展示,如果不用 stream 的话就变成了写 consumer 然后把统计结果写入到 mysql,kafka 的优势就体现不出来了,求教一下大家都是怎么做统计的

要实现一个多维度的统计功能,比如说按时间,城市,性别,设备等维度进行统计。我调研了一下 kafka streams,能从 topic 中创建 stream,然后在 stream 上可以写 ksql 查询,但是 ksql 查询的结果还是 stream,没法直接放到 mysql 中进行统计报表展示,如果不用 stream 的话就变成了写 consumer 然后把统计结果写入到 mysql,kafka 的优势就体现不出来了,求教一下大家都是怎么做统计的
1 owenliang Jul 19, 2018 via Android storm 了解一下,spark streaming 了解一下 |
2 woshishabi Ju 20, 2018 via Android @owenliang 跟这些没关系。LZ 需要换一个存储后端,延迟低点的,KV Storage 即可,然后自行组织索引结构,流式吞吐量上去了 mysql 不是非常合适。本人做流式大概六年多了,LZ 这种简单 stateless 场景即使自己写 processor 不依赖框架也行。如果真要上,不建议 storm,其余随你折腾。 |
3 thundernet8 Jul 20, 2018 via Android 用 Druid 试试 |
4 xcaptain OP @woshishabi 能更详细的说下后端存储的设计吗?我目前用 confluence platform 流计算这块基本是搞定了,后端如何存确实是没想清楚,用 kv 存储的话如何做范围查询呢 |
5 xcaptain OP @thundernet8 以前没用过这个,查了一下好像比 kafka stream 更符合我的需求,感谢 |
6 woshishabi Jul 20, 2018 via Android @xcaptain 需要支持 range query 的 kv store,比如 rocksdb 这样的 做好 sharding 即可,吞吐量 /延迟不会有问题,但是运维的话对于小团队可能比较麻烦点,需要开源组件或者自己维护 replica. 另外有个次一点的选择,hbase,在线服务有时是可以用的,吞吐量足够延迟会大点,看你是不是经常做查询以及对查询的延迟要求,然后对每一个维度都建一个索引即可。 |
7 woshishabi Jul 20, 2018 via Android 顺便说一句这需求用 spark streaming or flink or 其他什么基本没区别,为啥,就是简单的无状态统计服务(流式里最最基础的)。一两个 processor 就能搞定的事情(一个 parser 做数据清洗+聚合再来一个负责 import 的足够了),这么简单的拓扑,拿框架说事的基本都在扯淡。瓶颈自然是 storage client 这里。 |
8 cf0834 Jul 20, 2018 storm、spark streaming、flink 都可以玩转你的需求 |
9 aboutyang Jul 20, 2018 kafka streams + kafka connect |
10 xcaptain OP 今天又调研了一下 kafka + clickhouse,目前来看效果还不错,clickhouse 的语法类似 mysql,学习成本比较低,开源的数据可视化工具 redash 也支持 clickhouse,可能就用这个方案了 |