Spark实时统计订单量 - 简书
http://www.jianshu.com/p/3ec093a9d584
注:组件不了解的同学可参考其他文章,本文主要讲项目的实现
1、某些同学会问,直接在业务系统加入JS埋点通过发日志不更好吗?
答:第一、JS埋点业务系统涉及产品改造,不可能因为一个需求让你去随便改业务系统。第二、即使加入JS埋点也不可能获得业务系统的全部数据。所以业务系统核心数据还得去业务系统库获取。
2、还有人问加入Kafka太多余
答:第一、加入Kafka为了使系统扩展性更强,可方便对接各种开源产品。第二、通过Kafka消息组可使同一条消息被不同Consumer消费,用户离线和实时两条线。
【一点资讯】Spark在GrowingIO数据无埋点全量采集场景下的实践 www.yidianzixun.com
http://www.yidianzixun.com/home?page=article&id=0EXq2NT4&up=234
遇到的问题
我们在使用Spark的过程中还遇到一些问题。这些问题可能有一些人也遇到过,我们可以分享一下我们在处理这些问题过程中的一些想法。
比如说我们遇到的Kafka重复消费的问题,对于我们来说Kafka的消费的目标不是用Exactly Once。当我们遇到一些问题一些统计逻辑或者一些数据晚到的问题的时候,我们需要从某一个时间点重新回追所有的数据,这样的话Kafka就要支持重复消费。
问题1:Kafka消息重复消费
首先Kafka重复消费的问题。
我们目前使用的是Spark的Kafka Direct API,Direct API不维护offset,所以我们选择在zookeeper自己维护,这样的话如果想重复消费的时候我们只需要找到对应时间点的offset,然后从这个offset重跑就可以了。
目前有很多其他的公司,会定期的维护一个offset到时间的映射,然后当他们需要找到某个时间的时候他到这个映射表里去反查。我们的消息虽然不是严格时序的,但它都是接近时序的,可能两个消息之间最多差一二十秒,所以我们可能通过近似二分法来从Kafka里找到对应的时间点的offset。
同时我们使用Kafka的partition加offset作为这个消息的唯一ID,这样的话在生成一个消息的时候,我们的ID就不会重复,即使你重跑很多次,HBase会自动把它去重。
数据倾斜是多么痛?spark作业/面试/调优必备秘籍
http://mp.weixin.qq.com/s?src=3×tamp=1477560215&ver=1&signature=gWAPwUKk8c8DWu7rMLSS0LVvlBPoi3mvSzH8FtRLwMNgV0OBW5YCpzmlrVAC85vSEVyrhCGegGNsaFMC2tRwQcH5Mz3fGB6tX-sov6NXUFQL0HNSN9ALtzxQLluX8S4CF9DQVthnX7IM6bU8-Klpk*1CYIcmDNLzwKUs9NKaY=
告诉大家一个屡试不爽的经验结论:一般情况下,OOM的原因都是数据倾斜。某个task任务数据量太大,GC的压力就很大。这比不了Kafka,因为【kafka的内存是不经过JVM的。是基于Linux内核的Page.】