spark streaming读kafka写elasticsearch(真实生产环境)
spark streaming作为当下依然火热的流计算引擎,对于kafka和elasticsearch都有很好的api支持,以下是笔者在实际生产环境中的一个数据从kafka到es案例。 首先说一下几个重点: kafka消费offset使用mysql保存 ,一开始使用了 ScalikeJDBC 这个包来实现对数据库的访问,后来感觉用起来不太灵活,所以就写了原生的mysql JDBC工具类,也有不少好处,比如事务控制更加灵活,不再需要导入ScalikeJDBC的那好几个jar包 数据库获取offset后,会与kafka最早的offset做一个校验 ,因为机器资源紧张,kafka里数据只保存一天,如果spark streaming任务因为故障或是其他原因停了一段时间,这时再开启任务从mysql获取的offset有可能会超出kafka里offset的范围,这时就要把当前的offset进行替换。如果对数据处理速度有要求的话这一步可以注释掉,等需要的时候再开启。 第一步 Maven配置 这里相关工具的版本: scala:2.11.8 spark:2.3.4 kafka:0.10.1.0 elasticsearch:7.0.0 maven配置如下: < properties > < scala.version > 2.11.8 </ scala.version > < spark.version