如何编写脚本/代码以阻止apache kafka使用者使用消息?

时间:2019-01-13 14:09:50

标签: java apache-kafka kafka-consumer-api

我需要编写Java代码才能启动kafka使用者使用消息。一旦使用者从命令行启动。但是不确定停止消费者处理的标准方法。

在本地Windows机器中,我编写了简单的独立生产者和使用者。现在,我要停止独立使用者使用其他代码/脚本进行进一步处理。 `private static final String TOPIC =“竞赛”;     私有最终静态字符串BOOTSTRAP_SERVERS =             “本地主机:9092”;

private static Consumer<String, String> createConsumer() {
    final Properties props = new Properties();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,BOOTSTRAP_SERVERS);
    props.put(ConsumerConfig.GROUP_ID_CONFIG,"test-consumer-group");
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer");
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer");
    // Create the consumer using props.
    consumer = new KafkaConsumer<>(props);
    // Subscribe to the topic.
    consumer.subscribe(Collections.singletonList(TOPIC));
    return consumer;
}

public static void main(String args[]) throws Exception {
    runConsumer();
}

private static void runConsumer(){
    Consumer<String, String> consumer = createConsumer();
    try{
        while (true) {
            ConsumerRecords<String, String> consumerRecords = consumer.poll(1000);
            for (ConsumerRecord<String, String> record : consumerRecords) {
                System.out.printf("partition = %d, offset = %d, key = %s, value = %s\n", record.partition(), record.offset(), record.key(), record.value()); 
            }
            consumer.commitAsync();
        }
    }catch(WakeupException wue){
        System.out.println("Wake Up Exception Occured");
        wue.printStackTrace();
    }
    catch(Exception e){
        e.printStackTrace();
    }finally {
        consumer.close();
    }
}`

1 个答案:

答案 0 :(得分:1)

使用close方法关闭KafkaConsumer,只需调用consumer.close();

公共无效close()

  

关闭使用者,等待最多30秒的默认超时以进行任何所需的清理。如果启用了自动提交,则将在默认超时范围内尽可能地提交当前偏移量。有关详细信息,请参见close(long,TimeUnit)。请注意,wakeup()不能用于中断关闭。

公共无效关闭(长时间超时,java.util.concurrent.TimeUnit timeUnit)具有指定的时间

  

尝试在指定的超时时间内彻底关闭使用者。此方法等待超时,直到使用者完成挂起的提交并离开组。如果启用了自动提交,则将在超时范围内提交当前偏移量。如果使用者无法完成偏移量提交并在超时到期之前正常退出组,则将使用者强制关闭。请注意,wakeup()不能用于中断关闭。