1. 拉取数据的方式
Receiver采用kafka高级api,一次性拉取固定时间的数据后再进行处理,这可能造成一个问题:拉取的数据过多,放不下怎么办?
Direct采用kafka低级api,直接连接到kafka的分区,rdd中的分区与kafka中的分区是一一对应的,他是一边拉取数据,一边处理数据,到达设置的时间间隔后,就作为一个批次进行计算结果。
2. 可靠性保证
Direct可以提供一次且紧一次语义。
Receiver要保证数据不丢失,需要WAL,提供至少一次的语义。
3. 高峰数据量过大的处理
Receiver方式只能手动设置最大接收速率,不能自动调节数据接收速率。
Direct可以使用反压机制自动调节数据接收速率。