Comment peut-on créer un sujet dans Kafka de l'API en utilisant IDE

voix
41

Comment peut-on créer un sujet dans Kafka de l'IDE en utilisant l'API parce que quand je fais ceci:

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

Je reçois l'erreur:

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

Et je suivais la configuration du développeur tel qu'il est.

Créé 05/06/2013 à 18:59
source utilisateur
Dans d'autres langues...                            


12 réponses

voix
66

Dans Kafka 0.8.1+ - la dernière version de Kafka d'aujourd'hui - vous pouvez créer un programme nouveau sujet via AdminCommand. La fonctionnalité de CreateTopicCommand(partie du Kafka 0.8.0 plus) qui a été mentionné dans l' une des réponses précédentes à cette question a été déplacé AdminCommand.

par exemple Scala pour 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)

Les dépendances de construction, en utilisant SBT comme par exemple:

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"),
  ...
)

EDIT: Ajout Java par exemple pour Kafka 0.9.0.0 (dernière version à partir de Jan 2016).

dépendances 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>

Code:

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

}

EDIT 2: Ajout Java par exemple pour Kafka 0.10.2.0 (dernière version en date du Avril 2017).

dépendances 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>

Code:

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

}
Créé 29/04/2014 à 10:00
source utilisateur

voix
19

A partir de 0.11.0.0 tout ce que vous avez besoin est:

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

Cet artefact contient maintenant AdminClient( org.apache.kafka.clients.admin).

AdminClient peut gérer plusieurs tâches d'administration Kafka, y compris la création de sujet:

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

La sortie de cette commande est CreateTopicsResultque vous pouvez utiliser pour obtenir une Futurepour l'opération ou la création de chaque sujet individuel:

  • pour obtenir un avenir pour toute l'opération, utilisez CreateTopicsResult#all().
  • pour obtenir Futures pour tous les sujets individuellement, utilisez CreateTopicsResult#values().

Par exemple:

CreateTopicsResult result = ...
KafkaFuture<Void> all = result.all();

ou:

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

KafkaFutureest « un avenir flexible qui prend en charge les appels et Enchaînement des autres modèles de programmation asynchrone, » et « finira par devenir une cale mince sur le dessus de Java 8 de CompletebleFuture. »

Créé 15/07/2017 à 21:37
source utilisateur

voix
13

Pour créer un sujet à travers java api et Kafka 0.8+ essayez ce qui suit,

Première importation ci-dessous déclaration

import kafka.utils.ZKStringSerializer$;

Créer un objet pour ZkClient de la manière suivante,

ZkClient zkClient = new ZkClient("localhost:2181", 10000, 10000, ZKStringSerializer$.MODULE$);
AdminUtils.createTopic(zkClient, myTopic, 10, 1, new Properties());
Créé 20/11/2014 à 12:22
source utilisateur

voix
10

Vous pouvez essayer avec classe kafka.admin.CreateTopicCommand scala pour créer du sujet à partir du code Java ... les arguments nécessaires lui fournissent.

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: Vous devez ajouter les dépendances de Maven jopt-simple-4.5&zkclient-0.1

Créé 28/08/2013 à 07:20
source utilisateur

voix
2

Si vous utilisez Kafka 0.10.0.0+, ce qui crée le sujet de Java nécessite le passage de paramètres de type RackAwareMode. Il est un objet de cas Scala, et de le faire est par exemple de Java est délicate ( la preuve: Comment puis-je « get » un objet de cas Scala de Java par exemple , mais il n'est pas applicable pour notre cas.).

Heureusement, rackAwareMode est un paramètre optionnel. Cependant, Java ne prend pas en charge les paramètres facultatifs. Comment résoudre cela? Voici une solution:

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

Utilisez-le avec la réponse de miguno, et vous êtes bon pour aller.

Créé 18/07/2016 à 17:26
source utilisateur

voix
1

Quelques façons votre appel ne fonctionnerait pas.

  1. Si votre cluster Kafka n'a pas assez nœuds pour soutenir une valeur de réplication de 3.

  2. S'il y a un préfixe de chemin de chroot, vous devez l'ajouter après le port de Zookeeper

  3. Vous n'êtes pas dans le répertoire Kafka installation lors de l'exécution (Ceci est le plus probable)

Créé 20/12/2013 à 00:16
source utilisateur

voix
1

De Kafka 0,8 producteur Exemple l'exemple ci - dessous va créer un sujet nommé page_visitset commencer à produire également si l' auto.create.topics.enableattribut est défini sur true(par défaut) dans le Kafka configuration Broker fichier

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();
   }
}
Créé 23/08/2013 à 23:49
source utilisateur

voix
0

Sur la base de la dernière api kafka-client et Kafka 1.1.1, la version de travail de code suit:

Importer les derniers kafka-clients en utilisant SBT.

// 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")

Le code pour la création de la rubrique dans 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())
  }

}

Valider le nouveau sujet à l'aide:

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

L' espoir , il est utile à quelqu'un. Référence: http://kafka.apache.org/21/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html

Créé 21/02/2019 à 09:32
source utilisateur

voix
0

Il est nouveau AdminZkClient API que nous pouvons utiliser pour gérer les sujets dans le serveur Kafka.

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$);

Vous pouvez consulter ce lien pour plus de détails https://www.analyticshut.com/streaming-services/kafka/create-and-list-kafka-topics-in-java/

Créé 02/07/2018 à 18:18
source utilisateur

voix
0

sujet création en scala. Si vous exécutez en mode seudo dans le fichier de configuration de courtier

auto.create.topics.enable = true

il permettra la création automatique de sujet sur le serveur. Si cela est défini sur true tente alors de produire, de consommer, ou chercher des métadonnées pour un sujet non-existante créera automatiquement avec le facteur de réplication par défaut et le nombre de partitions.

extrait de code ci-dessous.

import scala.util.Random
import java.util.Properties
import kafka.producer.ProducerConfig
import kafka.producer.Producer
import kafka.producer.KeyedMessage
import java.util.Date

class SimpleProducer {


  def sendmessages(){
  val rnd = new Random();

  val props = new Properties();  
  props.put("metadata.broker.list", "192.1.1.1:6667"); 
  props.put("serializer.class", "kafka.serializer.StringEncoder");
  //props.put("partitioner.class", "rtbi.dis.producers.SimplePartitioner")

  val config = new ProducerConfig(props);
  val producer = new Producer[String, String](config);
    for (event<-1 to 5000) { 
               val runtime = new Date().getTime;  
               val ip = "192.1.1.1" + rnd.nextInt(255); 
               val msg = runtime + ",www.example.com," + ip; 
               val data = new KeyedMessage[String, String]("mytopic", ip, msg); //here mytopic is a topic 
               producer.send(data);
        }
        producer.close();
  }
 }
  object SimpleProducer extends App{   
    val s= new SimpleProducer().sendmessages();
  }
Créé 22/02/2016 à 17:19
source utilisateur

voix
0

A partir de quel IDE sont votre tente?

S'il vous plaît fournir le chemin complet, ci-dessous sont la commande du terminal qui permettra de créer un sujet

  1. cd kafka/bin
  2. ./kafka-create-topic.sh --topic test --zookeeper localhost:2181
Créé 23/06/2013 à 08:59
source utilisateur

voix
-1

Comme de Kafka 0.10.1 le ZKStringSerializer mentionné par Michael est privé (Scala). Vous pouvez utiliser les méthodes d'usine createZkClient ou createZkClientAndConnection dans ZkUtils.

par exemple Scala pour Kafka 0.10.1:

import kafka.utils.ZkUtils

val sessionTimeoutMs = 10000
val connectionTimeoutMs = 10000
val (zkClient, zkConnection) = ZkUtils.createZkClientAndConnection(
  "localhost:2181", sessionTimeoutMs, connectionTimeoutMs) 

Ensuite, il suffit de créer le sujet comme Michael suggéré:

import kafka.admin.AdminUtils

val zkUtils = new ZkUtils(zkClient, zkConnection, false)
val numPartitions = 4
val replicationFactor = 1
val topicConfig = new Properties
val topic = "my-topic"
AdminUtils.createTopic(zkUtils, topic, numPartitions, replicationFactor, topicConfig)
Créé 20/06/2017 à 08:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more