2013-08-14 30 views
12

W Kafki 0.8beta tematem mogą być tworzone za pomocą polecenia jak poniżej wymienione hereKafka 0.8, czy można utworzyć temat z partycją i replikacją za pomocą kodu java?

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

powyższe polecenie stworzy temat o nazwie „test” z 3 przegrodami i 2 replik na partycji.

Czy mogę zrobić to samo za pomocą Java?

tej pory co znalazłem się przy użyciu języka Java możemy stworzyć producent jak widać poniżej

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

Stworzy to wątek o nazwie „mytopic” z liczbą partycji określony za pomocą „num.partitions” atrybut i zacznij produkcję.

Ale czy istnieje sposób zdefiniowania partycji i replikacji również? Nie mogłem znaleźć żadnego takiego przykładu. Jeśli nie możemy tego zrobić, oznacza to, że zawsze musimy utworzyć temat z partycjami i replikacją (zgodnie z naszym wymaganiem), a następnie użyć producenta do wytworzenia wiadomości w tym temacie. Na przykład czy będzie możliwe, jeśli chcę utworzyć "mytopic" w ten sam sposób, ale z inną liczbą partycji (przesłonięcie atrybutu num.partitions)?

+1

Co znalazłem do tej pory, za pomocą' kafka.javaapi.producer.Producer' API tematem może być utworzona, ale liczbę partycji zostanie w oparciu o wartość wymienionej jako 'num atrybut .partitions w pliku konfiguracyjnym. Aby utworzyć temat z partycjami niestandardowymi, myślę, że jedynym sposobem jest użycie skryptu konsoli, jak wspomniano powyżej. W takim przypadku temat musi zostać utworzony wcześniej, a następnie producent może rozpocząć produkcję na tym samym. – Hild

+0

Odpowiedziałem na ten sam problem w poniższym linku [Utwórz temat Kafki za pomocą Java] (http://stackoverflow.com/questions/16946778/how-can-we-create-a-topic-in-kafka-from-to -ide-using-api/18480684 # 18480684) Jeśli potrzebujesz dalszej pomocy lub fragmentu kodu. Daj mi znać, podzielę kod z zależnością od maven. – Biks

Odpowiedz

8

Uwaga: Moja odpowiedź obejmuje Kafka 0.8.1+, czyli najnowsza stabilna wersja dostępna od kwietnia 2014 r

Tak, można utworzyć wątek programowo za pośrednictwem interfejsu API Kafki. I tak, można określić żądaną liczbę partycji, a także współczynnik replikacji dla tematu.

Należy zauważyć, że ostatnio wydany Kafka 0.8.1+ zapewnia nieco inne API niż Kafka 0.8.0 (który był używany przez Biks w jego połączonej odpowiedzi). Dodałem code example to create a topic in Kafka 0.8.1+ do mojej odpowiedzi na pytanie How Can we create a topic in Kafka from the IDE using API, które Biks miał na myśli powyżej.

+0

Ten przykład nie działa w Javie, a przynajmniej nie mogę wymyślić, jak go skompilować. – quux00

+0

Masz rację - przykładowy kod znajduje się w Scali. Niestety nie można po prostu skopiować i wkleić go do kodu Java. –

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();`