网上用python写spark+kafka的资料好少啊 自己记录一点踩到的坑~
上面两个是最重要的资料,大多数问题可以通过仔细研读上面两个文档得到答案
官网上说了,spark和kafka连用有两种方式:接收器形式 以及 直连形式
一、 接收器形式
优点:支持kafka的group.id设置,支持用kafka api查询offset,如果数据断掉后,可以通过group.id轻松找到上一次失败的位置
缺点:
1.失败处理复杂。由于kafka队列信息由kafka自己记录,当spark消费了数据但是处理中出错时会导致数据丢失。为了避免数据丢失就必须开启Write Ahead Logs,把spark接收到的数据都存储到分布式文件系统中,比如HDFS,然后失败时从存储的记录中找到失败的消息。这导致同一批数据被kafka和spark存储了2次。造成数据冗余。
2.如果有多个地方都想获取同一个kafka队列的数据,必须建立多个流,无法用一个流并行处理。
该方法是比较老的一种方式,并不太被推荐。
二、直连形式
优点:
1. 不需两次存储数据,直连形式时,spark自己管理偏移信息,不再使用kafka的offset信息。所以spark可以自行处理失败情况,不要再次存储数据。spark保证数据传输时Exactly-once。
2.只需建立一个流就可以并行的在多个地方使用流中的数据
缺点:
不支持kafka的group,不支持通过kafka api查询offset信息!!!!
在连接后sp