场景为Spark读取一张MySQL表(innodb引擎), 数据量8000万,无自增ID,业务中一个字段为(订单ID)主键。要将该表数据读取后写入到HDFS。
如果 key 不为 null,那么默认的分区器会对 key 进⾏哈希(采⽤ MurmurHash2 算法,具备 ⾼运算性能及低碰撞率),最终根据得到的哈希值来计算分区号,拥有相同 key 的消息会被写⼊同⼀个分区。如果 key 为 null,那么消息将会以轮询的⽅式发往主题内的各个可⽤分区。
可以订阅多主题,可以订阅指定分区,可以暂停和重新启用某个分区消费,指定offset消费。在旧消费者客户端中,消费位移是存储在 ZooKeeper 中的。⽽在新消费者客户端中,消费位移存储在 Kafka 内部的主题_consumeroffsets 中。
利用DistributedCache将小表分发到各个节点上,在Map过程的setup()函数里,读取缓存里的文件,只将小表的连接键存储在hashSet中。利用DistributedCache将小表分发到各个节点上,在Map过程的setup()函数里,读取缓存里的文件,只将小表的连接键存储在hashSet中。在map()函数执行时,对每一条数据进行判断(包含小表数据),如果这条数据的连接键为空或者在hashSet里不存在,那么则认为这条数据无效,这条数据也不参与reduce的过程。
kafka优缺点,答案:1)只能支持统一分区内消息有序,无法实现全局消息有序2)会丢失数据和重复消费数据;3)对于一个窗口来说,Flink先增量计算,窗口关闭前,将增量计算结果发送给ProcessWindowFunction作为输入再进行处理。