我在网页https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example
中有以下代码似乎缺少的是如何配置分区数。我想指定4个分区,但总是以默认的2个分区结束。如何将代码更改为具有4个分区(不更改默认值)。
Properties props = new Properties();
props.put("metadata.broker.list", "localhost:9092,broker2:9092");
props.put("serializer.class", "kafka.serializer.StringEncoder");
props.put("partitioner.class", "com.gnip.kafka.SimplePartitioner");
props.put("request.required.acks", "1");
props.put("num.partitions", 4);
ProducerConfig config = new ProducerConfig(props);
Producer<String, String> producer = new Producer<String, String>(config);
Random rnd = new Random();
for (long nEvents = 0; nEvents < 1000; nEvents++) {
long runtime = new Date().getTime();
String ip = "192.168.2." + rnd.nextInt(255);
String msg = runtime + ",www.example.com," + ip;
KeyedMessage<String, String> data = new KeyedMessage<String, String>("page_visits2", ip, msg);
producer.send(data);
}
producer.close();
感谢, 迪安
答案 0 :(得分:10)
Kafka生产者api不允许您创建自定义分区,如果您尝试为不存在的主题生成一些数据,如果auto.create.topics.enable
中的BrokerConfig
属性,它将首先创建主题}设置为 TRUE 并开始发布相同的数据,但为此主题创建的分区数将基于配置文件中定义的num.partitions
参数(默认设置为一)。
现在要创建一个具有不同分区数的主题,首先需要创建主题,并且可以使用随Kafka分发一起提供的控制台脚本完成相同的操作。以下命令将允许您创建具有2个分区的主题(由--partition
标志指定)
bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 3 --partition 2 --topic my-custom-topic
不幸的是,就我的理解而言,目前还没有直接替代方案来实现这一目标。
答案 1 :(得分:0)
分区数是代理属性,对生产者没有任何影响,请参阅here。 如生产者示例页面所示,您可以使用自定义分区程序根据需要路由邮件,但如果未在代理程序属性中定义,则不会创建新分区。