web-dev-qa-db-ja.com

APIを使用してKafkaからIDEでトピックを作成する方法

APIを使用してKafkaからIDEでトピックを作成する方法は次のとおりです。

bin/kafka-create-topic.sh --topic mytopic --replica 3 --zookeeper localhost:2181

エラーが表示されます:

bash: bin/kafka-create-topic.sh: No such file or directory

そして、私はそのまま開発者の設定に従いました。

48
ramu

Kafka 0.8.1+-今日のKafkaの最新バージョン-AdminCommandを介してプログラムで新しいトピックを作成できます。 。この質問に対する以前の回答の1つで言及されたCreateTopicCommand(古いKafka 0.8.0の一部)の機能はAdminCommandに移動しました。

Kafka 0.8.1:のスカラーの例

import kafka.admin.AdminUtils
import kafka.utils.ZKStringSerializer
import org.I0Itec.zkclient.ZkClient

// Create a ZooKeeper client
val sessionTimeoutMs = 10000
val connectionTimeoutMs = 10000
// Note: You must initialize the ZkClient with ZKStringSerializer.  If you don't, then
// createTopic() will only seem to work (it will return without error).  The topic will exist in
// only ZooKeeper and will be returned when listing topics, but Kafka itself does not create the
// topic.
val zkClient = new ZkClient("zookeeper1:2181", sessionTimeoutMs, connectionTimeoutMs,
    ZKStringSerializer)

// Create a topic named "myTopic" with 8 partitions and a replication factor of 3
val topicName = "myTopic"
val numPartitions = 8
val replicationFactor = 3
val topicConfig = new Properties
AdminUtils.createTopic(zkClient, topicName, numPartitions, replicationFactor, topicConfig)

例としてsbtを使用して、依存関係を構築します。

libraryDependencies ++= Seq(
  "com.101tec" % "zkclient" % "0.4",
  "org.Apache.kafka" % "kafka_2.10" % "0.8.1.1"
    exclude("javax.jms", "jms")
    exclude("com.Sun.jdmk", "jmxtools")
    exclude("com.Sun.jmx", "jmxri"),
  ...
)

編集:Javaの例Kafka 0.9.0.0(2016年1月現在の最新バージョン)

Mavenの依存関係:

<dependency>
    <groupId>org.Apache.kafka</groupId>
    <artifactId>kafka_2.11</artifactId>
    <version>0.9.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.7</version>
</dependency>

コード:

import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;

import Java.util.Properties;

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

public class KafkaJavaExample {

  public static void main(String[] args) {
    String zookeeperConnect = "zkserver1:2181,zkserver2:2181";
    int sessionTimeoutMs = 10 * 1000;
    int connectionTimeoutMs = 8 * 1000;
    // Note: You must initialize the ZkClient with ZKStringSerializer.  If you don't, then
    // createTopic() will only seem to work (it will return without error).  The topic will exist in
    // only ZooKeeper and will be returned when listing topics, but Kafka itself does not create the
    // topic.
    ZkClient zkClient = new ZkClient(
        zookeeperConnect,
        sessionTimeoutMs,
        connectionTimeoutMs,
        ZKStringSerializer$.MODULE$);

    // Security for Kafka was added in Kafka 0.9.0.0
    boolean isSecureKafkaCluster = false;
    ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zookeeperConnect), isSecureKafkaCluster);

    String topic = "my-topic";
    int partitions = 2;
    int replication = 3;
    Properties topicConfig = new Properties(); // add per-topic configurations settings here
    AdminUtils.createTopic(zkUtils, topic, partitions, replication, topicConfig);
    zkClient.close();
  }

}

編集2:Javaの例Kafka 0.10.2.0(2017年4月現在の最新バージョン)

Mavenの依存関係:

<dependency>
    <groupId>org.Apache.kafka</groupId>
    <artifactId>kafka_2.11</artifactId>
    <version>0.10.2.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.9</version>
</dependency>

コード:

import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;

import Java.util.Properties;

import kafka.admin.AdminUtils;
import kafka.admin.RackAwareMode;
import kafka.utils.ZKStringSerializer$;
import kafka.utils.ZkUtils;

public class KafkaJavaExample {

  public static void main(String[] args) {
    String zookeeperConnect = "zkserver1:2181,zkserver2:2181";
    int sessionTimeoutMs = 10 * 1000;
    int connectionTimeoutMs = 8 * 1000;

    String topic = "my-topic";
    int partitions = 2;
    int replication = 3;
    Properties topicConfig = new Properties(); // add per-topic configurations settings here

    // Note: You must initialize the ZkClient with ZKStringSerializer.  If you don't, then
    // createTopic() will only seem to work (it will return without error).  The topic will exist in
    // only ZooKeeper and will be returned when listing topics, but Kafka itself does not create the
    // topic.
    ZkClient zkClient = new ZkClient(
        zookeeperConnect,
        sessionTimeoutMs,
        connectionTimeoutMs,
        ZKStringSerializer$.MODULE$);

    // Security for Kafka was added in Kafka 0.9.0.0
    boolean isSecureKafkaCluster = false;

    ZkUtils zkUtils = new ZkUtils(zkClient, new ZkConnection(zookeeperConnect), isSecureKafkaCluster);
    AdminUtils.createTopic(zkUtils, topic, partitions, replication, topicConfig, RackAwareMode.Enforced$.MODULE$);
    zkClient.close();
  }

}
71
Michael G. Noll

0.11.0.0の時点で必要なものは次のとおりです。

_<dependency>
    <groupId>org.Apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.11.0.0</version>
</dependency>
_

このアーティファクトには、AdminClient(_org.Apache.kafka.clients.admin_)が含まれています。

AdminClientは、トピック作成を含む多くのKafka管理タスクを処理できます。

_Properties config = new Properties();
config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka:9092");

AdminClient admin = AdminClient.create(config);

Map<String, String> configs = new HashMap<>();
int partitions = 1;
int replication = 1;

admin.createTopics(asList(new NewTopic("topic", partitions, replication).configs(configs)));
_

このコマンドの出力はCreateTopicsResultです。これを使用して、操作全体または個々のトピック作成ごとにFutureを取得できます。

  • 操作全体の将​​来を取得するには、CreateTopicsResult#all()を使用します。
  • すべてのトピックのFuturesを個別に取得するには、CreateTopicsResult#values()を使用します。

例えば:

_CreateTopicsResult result = ...
KafkaFuture<Void> all = result.all();
_

または:

_CreateTopicsResult result = ...
for (Map.Entry<String, KafkaFuture<Void>> entry : result.values().entrySet()) {
    try {
        entry.getValue().get();
        log.info("topic {} created", entry.getKey());
    } catch (InterruptedException | ExecutionException e) {
        if (Throwables.getRootCause(e) instanceof TopicExistsException) {
            log.info("topic {} existed", entry.getKey());
        }
    }
}
_

KafkaFutureは「コールチェーンとその他の非同期プログラミングパターンをサポートする柔軟な未来」であり、「Java 8のCompletebleFuture

33

Java apiおよびKafka 0.8+を使用してトピックを作成するには、以下を試してください。

以下の最初のインポートステートメント

import kafka.utils.ZKStringSerializer$;

ZkClientのオブジェクトを次の方法で作成します。

ZkClient zkClient = new ZkClient("localhost:2181", 10000, 10000, ZKStringSerializer$.MODULE$);
AdminUtils.createTopic(zkClient, myTopic, 10, 1, new Properties());
13
Jaya Ananthram

Kafka.admin.CreateTopicCommand scala classを使用して、Java code ... providng from required ...

String [] arguments = new String[8];
arguments[0] = "--zookeeper";
arguments[1] = "10.***.***.***:2181";
arguments[2] = "--replica";
arguments[3] = "1";
arguments[4] = "--partition";
arguments[5] = "1";
arguments[6] = "--topic";
arguments[7] = "test-topic-Biks";

CreateTopicCommand.main(arguments);

NB:jopt-simple-4.5zkclient-0.1のMaven依存関係を追加する必要があります

10
Biks

最新のkafka-client apiおよびKafka 1.1.1に基づいて、作業バージョンのコードは次のとおりです。

Sbtを使用して最新のkafka-clientsをインポートします。

// https://mvnrepository.com/artifact/org.Apache.kafka/kafka-clients
libraryDependencies += Seq("org.Apache.kafka" % "kafka-clients" % "2.1.1",
"org.Apache.kafka" %% "kafka" % "1.0.0")

Scalaでトピックを作成するためのコード:

import Java.util.Arrays
import Java.util.Properties

import org.Apache.kafka.clients.admin.NewTopic
import org.Apache.kafka.clients.admin.{AdminClient, AdminClientConfig}

class CreateKafkaTopic {
  def create(): Unit = {
    val config = new Properties()
    config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "192.30.1.5:9092")

    val localKafkaAdmin = AdminClient.create(config)

    val partitions = 3
    val replication = 1.toShort
    val topic = new NewTopic("integration-02", partitions, replication)
    val topics = Arrays.asList(topic)

    val topicStatus = localKafkaAdmin.createTopics(topics).values()
    //topicStatus.values()
    println(topicStatus.keySet())
  }

}

次を使用して新しいトピックを検証します。

./kafka-topics.sh --zookeeper 192.30.1.5:2181 --list

それが誰かに役立つことを願っています。リファレンス: http://kafka.Apache.org/21/javadoc/index.html?org/Apache/kafka/clients/admin/AdminClient.html

3
ForeverLearner

Kafka 0.10.0.0+を使用している場合、Javaからトピックを作成するには、RackAwareModeタイプのパラメーターを渡す必要があります。それはScalaケースオブジェクトであり、Javaからインスタンスを取得するのは難しいです(証明: JavaからScalaケースオブジェクトを「取得」するにはどうすればよいですか? for例。しかし、それは私たちのケースには適用されません)。

幸い、rackAwareModeはオプションのパラメーターです。しかし、Javaはオプションのパラメーターをサポートしていません。どうやってそれを解決しますか?解決策は次のとおりです。

AdminUtils.createTopic(zkUtils, topic, 1, 1, 
    AdminUtils.createTopic$default$5(),
    AdminUtils.createTopic$default$6());

Migunoの答えと一緒に使ってください。

2
Dmitriusan

通話が機能しないいくつかの方法。

  1. Kafka=クラスターに、レプリケーション値3をサポートするのに十分なノードがなかった場合.

  2. Chrootパスプレフィックスがある場合は、zookeeperポートの後に追加する必要があります

  3. 実行中にKafka=インストールディレクトリに存在しない(これが最も可能性が高い)

1
Gregory Patmore

Kafka=サーバーでトピックを管理するために使用できるAdminZkClientがあります。

String zookeeperHost = "127.0.0.1:2181";
Boolean isSucre = false;
int sessionTimeoutMs = 200000;
int connectionTimeoutMs = 15000;
int maxInFlightRequests = 10;
Time time = Time.SYSTEM;
String metricGroup = "myGroup";
String metricType = "myType";
KafkaZkClient zkClient = KafkaZkClient.apply(zookeeperHost,isSucre,sessionTimeoutMs,
                connectionTimeoutMs,maxInFlightRequests,time,metricGroup,metricType);

AdminZkClient adminZkClient = new AdminZkClient(zkClient);

String topicName1 = "myTopic";
int partitions = 3;
int replication = 1;
Properties topicConfig = new Properties();

adminZkClient.createTopic(topicName1,partitions,replication,
            topicConfig,RackAwareMode.Disabled$.MODULE$);

詳細については、このリンクを参照してください https://www.analyticshut.com/streaming-services/kafka/create-and-list-kafka-topics-in-Java/

1
Mahesh Mogal

From Kafka 0.8 Producer Example 以下のサンプルは、page_visitsという名前のトピックを作成し、auto.create.topics.enable属性がtrueに設定されている場合に生成を開始します(デフォルト)Kafka Broker config ファイル

import Java.util.*;

import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;

public class TestProducer {
    public static void main(String[] args) {
        long events = Long.parseLong(args[0]);
        Random rnd = new Random();

        Properties props = new Properties();
        props.put("metadata.broker.list", "broker1:9092,broker2:9092 ");
        props.put("serializer.class", "kafka.serializer.StringEncoder");
        props.put("partitioner.class", "example.producer.SimplePartitioner");
        props.put("request.required.acks", "1");

        ProducerConfig config = new ProducerConfig(props);

        Producer<String, String> producer = new Producer<String, String>(config);

        for (long nEvents = 0; nEvents < events; 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_visits", ip, msg);
            producer.send(data);
        }
        producer.close();
   }
}
1
Hild

そこからIDEしようとしていますか?

完全なパスを入力してください。以下は、トピックを作成するターミナルからのコマンドです

  1. cd kafka/bin
  2. ./kafka-create-topic.sh --topic test --zookeeper localhost:2181
0
Sanket