消费者关闭时写一个kafka话题

时间:2015-10-12 16:43:22

标签: java apache-kafka apache-storm kafka-producer-api

我试图整合kafka-storm。我刚开始时只有几个例子。

我能够从GitHub运行示例。接下来我试图在eclipse中编写一个Producer类,使用KAFKA PRODUCER API将消息发布到kafka主题。

Scenario1:

当我的consumer-shell使用say topic test运行时,测试我运行我的生产者类。我能够看到我的所有已发布消息的消费者shell。

Scenario2

我还没有启动我的消费者shell(说消费者已经失败)。我运行我的制作类。这些消息将发布到kafka。

现在,如果消息已发布,并且现在在停机后如果我启动了我的消费者shell,它就不会阅读已发布的消息主题。

为什么呢?我想它维护主题消费的日志。难道不是在阅读消息吗?

我需要提一下配置参数吗?

Properties props = new Properties();
props.put("metadata.broker.list", "localhost:9092");
props.put("zk.connect", "localhost:2181");
props.put("serializer.class", "kafka.serializer.StringEncoder");
props.put("request.required.acks", "1");

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

        for ( int nEvents=0; nEvents<events;nEvents++)
        {
          String ip="192.168.2."+rnd.nextInt(255);
          String msg=getNextTradeData(); // Class to generate data
          KeyedMessage<String,String> data=new KeyedMessage<String, String>("TradeFrequency",ip,msg);
          Thread.sleep(100);
          System.out.println(msg);
          producer.send(data);  

        }
producer.close();

}

或者我需要做些什么来改变消费者。我正在使用包中提供的consumer-shell,并使用

启动它
  bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic first-topic

1 个答案:

答案 0 :(得分:1)

当您启动kafka-console-consume时,它将从当前偏移量中读取。这是偏移NOW(),而不是过去。

要查看邮件是否已发布,您有两种选择:

  1. 使用--from-beginning选项,从主题的开头读取

    bin / kafka-console-consumer.sh --zookeeper localhost:2181 - topic first topic - from-beginning

  2. 使用--consumer.config选项

    在zookeeper / kafka中保持console-consumer的状态

    bin / kafka-console-consumer.sh --zookeeper localhost:2181 - topic first topic --consumer.config /home/sql-injection/consumer-config.txt

  3. 根据此nice page,您在消费者配置中需要的参数是:consumer.idclient.id