Scala 卡夫卡制作人创建主题,但无法发送消息

Scala 卡夫卡制作人创建主题,但无法发送消息,scala,cloudera-cdh,kafka-consumer-api,kafka-producer-api,Scala,Cloudera Cdh,Kafka Consumer Api,Kafka Producer Api,我刚接触斯卡拉和卡夫卡,遇到了一些麻烦 我正在尝试将scala kafka制作人连接到安装在cloudera express服务器上的kafka服务器。 我已经在VMs中使用过一次,没有任何问题 当我运行producer时,会创建所需的主题,但不会发送任何消息,或者我认为是这样 下面是一些代码: 卡夫卡制作人 但在这里我看到什么都没有发生 当我检查主题时,制作人应该创建的主题在列表中 kafka-topics -zookeeper zk:2181 --list 我对消费者也有类似的问题: im

我刚接触斯卡拉和卡夫卡,遇到了一些麻烦

我正在尝试将scala kafka制作人连接到安装在cloudera express服务器上的kafka服务器。 我已经在VMs中使用过一次,没有任何问题

当我运行producer时,会创建所需的主题,但不会发送任何消息,或者我认为是这样

下面是一些代码:

卡夫卡制作人

但在这里我看到什么都没有发生

当我检查主题时,制作人应该创建的主题在列表中

kafka-topics -zookeeper zk:2181 --list
我对消费者也有类似的问题:

import java.util.{Arrays, Properties}
import org.apache.kafka.clients.consumer.KafkaConsumer

class KafkaConsumerManager {

    val props = new Properties()
    props.put("bootstrap.servers", KafkaServer.KAFKA_ADDRESS)
    props.put("group.id", "testGroup")
    props.put("enable.auto.commit", "true")
    props.put("auto.commit.interval.ms", "1000")
    props.put("linger.ms", "1")
    props.put("session.timeout.ms", "3000")
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
    props.put("zookeeper.connect", KafkaServer.ZOOKEEPER_ADDRESS)

    val consumer = new KafkaConsumer[String, String](props)

    def start() {
        println("Start Consumer")
        consumer.subscribe(Arrays.asList("test-counter"))

        while (true) {
            val records = consumer.poll(100)
            val iterator = records.iterator()

            while (iterator.hasNext) {
                val record = iterator.next()
                printf("Consumer: offset = %d, key = %s, value = %s \n", record.offset(), record.key(), record.value())
            }
        }
    }
}
当我通过kafka console producer在服务器上创建消息时,我看到它们出现在服务器上的kafka console使用者中,而不是我编写的使用者中

kafka-console-producer --broker-list ks:9092 --topic test-counter

KafkaServer.ZOOKEEPER_地址与kafka控制台使用者的参数zk:2181相同,KafkaServer.kafka_地址与kafka控制台生产者的参数ks:9092相同。

我尝试了代码,发现:

  • 用户应在consumer中指定反序列化器 特性:

     props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
     props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
    
  • session.timeout.ms
    属性有问题。发件人:

    heartbeat.interval.ms-。。。值必须设置为低于会话超时.ms默认值:3000

    这意味着您应该增加
    会话.timeout.ms
    值,或者简单地删除该行,因为 属性是大于默认值的
    30000
    heartbeat.interval.ms


执行更正后,代码正常工作。

我尝试了该代码,发现:

  • 用户应在consumer中指定反序列化器 特性:

     props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
     props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
    
  • session.timeout.ms
    属性有问题。发件人:

    heartbeat.interval.ms-。。。值必须设置为低于会话超时.ms默认值:3000

    这意味着您应该增加
    会话.timeout.ms
    值,或者简单地删除该行,因为 属性是大于默认值的
    30000
    heartbeat.interval.ms


执行更正后,代码工作。

我将立即尝试此更改,但问题仍然存在。但是现在我可以通过
java.net.ConnectException:Connection timed out:no进一步的信息看出原因。
由于某种原因,制作人和消费者都无法连接到ks:9092。我已经在另一台kafka服务器上试过这段代码,在那里它工作正常。我们在cloudera上的kafkaserver和配置似乎有一些问题。我将立即尝试此更改,但问题仍然存在。但是现在我可以通过
java.net.ConnectException:Connection timed out:no进一步的信息看出原因。
由于某种原因,制作人和消费者都无法连接到ks:9092。我已经在另一台kafka服务器上试过这段代码,在那里它工作正常。我们的kafkaserver在cloudera和配置上似乎存在一些问题。
 props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
 props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")