先说说partition的好处:Partition的好处是可以并发的获取同类数据,提高效率。
第一步需要实现Partitioner对象。
public
class
ProducerPartitioner
implements
Partitioner<String> {
public
static
final
Logger LOG=LoggerFactory.getLogger(UserInfo.
class
);
@Override
public
int
partition(String key,
int
numPartitions) {
LOG.info(
"ProducerPartitioner key:"
+key+
" partitions:"
+numPartitions);
return
key.length() % numPartitions;
}
}
在上面的partition方法中,值得注意的是,key我们是在构造数据发送对象时设置的,这个key是区分存储的关键,比如我想将我的数据按照不同的用户类别存储。
第二步中就是需要构造数据的时候设定:
/**选择用哪个类来进行设置partition*/
props.put(
"partitioner.class"
,
"org.kafka.partitioner.ProducerPartitioner"
);
/**构造数据发送对象**/
ProducerData<String,UserInfo> data=
new
ProducerData<String, UserInfo
>(
"test"
,
"developerTest"
, msg);
增加了对partition的配置,并且修改了ProducerData的参数,其中,中间的就是key(developerTest),如果不设置partition,kafka则随机的向broker中发送请求.
今天就总结这么多吧!