2014-03-03 84 views
2

指定分區的數量我從網頁https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example如何在卡夫卡2.8

什麼似乎缺少的是如何配置的分區數目如下代碼。我想指定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(); 

感謝, 院長

回答

7

卡夫卡生產API不會允許你創建自定義分區,如果你嘗試製作一些數據不存在,如果在BrokerConfigauto.create.topics.enable屬性設置爲TRUE它會首先創建的話題的話題並開始發佈相同的數據,但爲此主題創建的分區數將基於配置文件中定義的num.partitions參數(默認情況下它設置爲1)。

現在要創建具有不同數量分區的主題,您需要首先創建主題,使用與Kafka發行版一起發運的控制檯腳本也可以完成相同的操作。下面的命令將允許您創建一個話題2分區(由--partition標誌指定)

bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 3 --partition 2 --topic my-custom-topic 

不幸的是,據我的理解去目前還沒有直接的替代來實現這一點。

0

分區的數量是一個代理屬性,不會有任何影響的生產者,看到here。 正如生產者示例頁面所示,您可以根據自己的喜好使用自定義分區程序來路由消息,但如果未在代理屬性中定義新分區,則不會創建新分區。