一、背景
因为是项目驱动的去了解Storm-kafka,所以会由于分工去先了解某一部分,顺序有点杂乱。
二、Storm-Kafka介绍
了解Storm的都知道,Storm拓扑中比较基本的就是Spout和Bolt,Spout作为数据发射源,可以从数据库或者其他地方取得数据然后发射出去,Bolt就是中间一个个运算处理的组件,最后一个Bolt可以担任数据处理结果汇总或者数据落地的角色。
三、Storm-Kafka为我们提供了什么
最先了解的是KafkaSpout和KafkaBolt,显而易见就是把我们上面说的Spout和最后一个Bolt的功用具体化,具体到KafkaSpout就是从Kafka取数据源的Spout,而KafkaBolt就是把数据处理结果转化为一定格式,发送到Kafka的Bolt。
但是,在这之中我们需要有一些规约,就是Spout从Kafka拿到数据后我要怎么处理转换成Storm中的数据格式–Tuple,还有Bolt要怎么把接收到的Tuple转换成Kafka的格式发送到Kafka,这就涉及到另外两个基础的概念,Scheme和Mapper,它们分别说明了我们上面的规约,并把数据进行转换再返回。
Scheme就实现了从byte[]到其他格式的转换(默认提供的是从字节流到字符串的转换)。Mapper就实现了从Tuple到其他格式的转换(默认提供的是从Tuple取Field为key的作为key返回,取Field为message的作为message转换),也让我们可以个性化实现(当然Storm-Kafka也提供了默认的)。
四、Mapper
Mapper接口:
package org.apache.storm.kafka.bolt.mapper;
import org.apache.storm.tuple.Tuple;
import java.io.Serializable;
/**
* as the really verbose name suggests this interface mapps a storm tuple to kafka key and message.
* @param <K> type of key.
* @param <V> type of value.
*/