2013-08-14 8 views
12

काफ्का में 0.8beta नीचे कोई विषय की तरह एक आदेश का उपयोग कर के रूप में उल्लेख hereकाफ्का 0.8, क्या जावा कोड का उपयोग करके विभाजन और प्रतिकृति के साथ विषय बनाना संभव है?

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

उपरोक्त आदेश 3 विभाजन और 2 विभाजन प्रति प्रतिकृतियां के साथ "परीक्षण" नाम के एक विषय पैदा करेगा बनाया जा सकता है।

क्या मैं जावा का उपयोग कर वही काम कर सकता हूं?

अब तक मैं क्या पाया जावा उपयोग कर रहा है जैसा कि नीचे

Producer<String, String> producer = new Producer<String, String>(config); 
    producer.send(new KeyedMessage<String, String>("mytopic", msg)); 

इस विभाजन की संख्या के साथ "mytopic" निर्दिष्ट "num.partitions" का उपयोग कर नाम के एक विषय बनाएगा देखा एक निर्माता बना सकते हैं विशेषता और उत्पादन शुरू करते हैं।

लेकिन क्या विभाजन और प्रतिकृति को परिभाषित करने का कोई तरीका है? मुझे ऐसा कोई उदाहरण नहीं मिला। यदि हम ऐसा नहीं कर सकते हैं तो इसका मतलब है कि हमें हमेशा विभाजन और प्रतिकृति (हमारी आवश्यकता के अनुसार) के साथ विषय बनाने की आवश्यकता है और फिर उस विषय के भीतर संदेश का उत्पादन करने के लिए निर्माता का उपयोग करें। उदाहरण के लिए यदि मैं "mytopic" को उसी तरह से बनाना चाहता हूं, लेकिन विभाजन की विभिन्न संख्या (num.partitions विशेषता को ओवरराइड करना) के साथ यह संभव होगा?

+1

मैं क्या पाया अब तक है, एक विषय बनाया जा सकता है' kafka.javaapi.producer.Producer' एपीआई लेकिन विभाजन की संख्या का उपयोग कर 'संख्या के रूप में उल्लेख मूल्य के आधार पर किया जाएगा कॉन्फ़िगरेशन फ़ाइल में .partitions' विशेषता। कस्टम विभाजन के साथ विषय बनाने के लिए मुझे लगता है कि ऊपर वर्णित कंसोल स्क्रिप्ट का उपयोग करने का एकमात्र तरीका है। उस स्थिति में विषय पहले और उसके बाद उत्पादक बनाना शुरू कर देना चाहिए। – Hild

+0

मैंने नीचे उल्लिखित लिंक में एक ही समस्या का जवाब दिया है [जावा का उपयोग करके काफ्का विषय बनाएं] (http://stackoverflow.com/questions/16946778/how-can-we-create-a-topic-in-kafka-from-the -इड-यूजिंग-एपीआई/18480684 # 18480684) यदि आपको किसी और मदद या कोड स्निपेट की आवश्यकता है। मुझे बताएं कि मैं मेवेन निर्भरता के साथ कोड साझा करूंगा – Biks

उत्तर

8

नोट: मेरा जवाब को शामिल किया गया काफ्का 0.8.1+, यानि कि नवीनतम स्थिर अप्रैल 2014

हाँ के रूप में उपलब्ध संस्करण, आप काफ्का एपीआई के माध्यम से प्रोग्राम के एक विषय बना सकते हैं। और हां, आप विभाजन के वांछित संख्या के साथ-साथ विषय के लिए प्रतिकृति कारक निर्दिष्ट कर सकते हैं।

ध्यान दें कि हाल ही में जारी किए गए काफ्का 0.8.1+ काफ्का 0.8.0 (जिसका उपयोग बीक द्वारा उनके लिंक किए गए उत्तर में किया गया था) से थोड़ा अलग एपीआई प्रदान करता है। मैंने How Can we create a topic in Kafka from the IDE using API प्रश्न के उत्तर में code example to create a topic in Kafka 0.8.1+ जोड़ा जो कि बीक ऊपर उल्लिखित थे।

+0

यह उदाहरण जावा में काम नहीं करता है, या कम से कम मैं इसे संकलित करने के तरीके को समझ नहीं सकता हूं। – quux00

+0

आप सही हैं - उदाहरण कोड स्कैला में है। तो दुर्भाग्य से आप इसे अपने जावा कोड में कॉपी-पेस्ट नहीं कर सकते हैं। –

0

`

import kafka.admin.AdminUtils; 
import kafka.cluster.Broker; 
import kafka.utils.ZKStringSerializer$; 
import kafka.utils.ZkUtils; 

String zkConnect = "localhost:2181"; 
ZkClient zkClient = new ZkClient(zkConnect, 10 * 1000, 8 * 1000, ZKStringSerializer$.MODULE$); 
ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zkConnect), false); 
    Properties pop = new Properties(); 
    AdminUtils.createTopic(zkUtils, topic.getTopicName(), topic.getPartitionCount(), topic.getReplicationFactor(), 
      pop); 
    zkClient.close();` 
संबंधित मुद्दे