软件包无法从分区使用

时间:2018-10-31 00:19:19

标签: go apache-kafka sarama

我无法使用某个主题,也不确定我的代码或kafka配置是否存在问题。我遇到的问题是它卡在“开始”的打印语句上,因此它没有从通道<-partitionConsumer.Messages()接收消息。

这些是我在kafka设置(https://kafka.apache.org/quickstart)中执行的步骤,其中包含一些消息,我确定它们存在,因为当我运行以下命令时,我会看到值。

  

bin / kafka-console-consumer.sh --partition 0 --topic测试   --bootstrap-server localhost:9092 --offset最早

     
      
  1. bin / zookeeper-server-start.sh config / zookeeper.properties
  2.   
  3. bin / kafka-server-start.sh config / server.properties
  4.   
  5. bin / kafka-topics.sh-创建--zookeeper本地主机:2181-复制因子1-分区1-主题测试
  6.   
  7. bin / kafka-console-producer.sh --broker-list localhost:9092 --topic测试
  8.   
func RetrieveConsumed() (int){
    consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, nil)
    if err != nil {
        fmt.Println("ERROR")
        panic(err)
    }

    defer func() {
        if err := consumer.Close(); err != nil {
            fmt.Println("ERROR")
        }
    }()

    partitionConsumer, err := consumer.ConsumePartition("test", 0, sarama.OffsetOldest)
    if err != nil {
        fmt.Println("ERROR")
        panic(err)
    }
    defer func() {
        if err := partitionConsumer.Close(); err != nil {
            fmt.Println("ERROR")
        }
    }()

    // Trap SIGINT to trigger a shutdown.
    signals := make(chan os.Signal, 1)
    signal.Notify(signals, os.Interrupt)

    consumed := 0
    ConsumerLoop:
        for {
            fmt.Println("Starts")
            select {
            case msg := <-partitionConsumer.Messages():
                fmt.Printf("Consumed message offset %d\n", msg.Offset)
                consumed++
            case <- partitionConsumer.Errors():
                break ConsumerLoop
            case <-signals:
                break ConsumerLoop
            }
        }

        fmt.Printf("Consumed: %d\n", consumed)
        return consumed
}

0 个答案:

没有答案