1. 实现Random Partitioner(即对于每条消息,发送到一个随机的Partition)
import kafka.producer.Partitioner;
/**
* 随机达到某一个节点
* Created by niewj on 2016/11/30.
*/
public class RandomPartitioner implements Partitioner {
@Override
public int partition(Object key, int numPartitions) {
/**
* 获得一个0到1000之间的随机数
*/
int randomNum = new Double(Math.random() * 1000).intValue();
return randomNum % numPartitions;
}
}
2. 通过实验验证Partitioner的实例个数及其是否需要保证线程安全
3. 请思考何时应该使用同步Producer,何时应使用异步Producer
追求高性能,能容忍数据偶尔丢失的情况下,可以使用异步Producer;
追求高可用,要求数据完整性的情况,可以使用同步Producer