这是我从java客户端构建kafka使用者的代码。
def buildConsumer[Key, Value](
configuration: KafkaConfiguration, commitInterval: Long, groupId: Option[String] = None)(
implicit keyDeserializer: Deserializer[Key], valueDeserializer: Deserializer[Value]
): KafkaJavaConsumer[Key, Value] = {
val settingsMap: Map[String, Object] = Map(
"bootstrap.servers" -> s"${configuration.bootstrapHost}:${configuration.bootstrapPort}",
"group.id" -> groupId.getOrElse(s"${configuration.topic}-${UUID.randomUUID}"),
"enable.auto.commit" -> "true",
"auto.commit.interval.ms" -> commitInterval.toString,
"auto.offset.reset" -> "earliest"
) ++ configuration.additionalOptions.getOrElse(Map.empty[String, Object])
val consumer = new KafkaJavaConsumer[Key, Value](settingsMap.asJava, keyDeserializer, valueDeserializer)
consumer.subscribe(Seq(configuration.topic).asJava)
consumer
}
我的kafka正在6050端口上运行,我已经在控制台中对其进行了测试,以便从该特定端口生成和使用它。我想知道我的问题是否与我上面的配置有关。我还使用EmbeddedKafka
框架测试了上面的代码,问题似乎是在运行实际的kafka服务器。
我忘了补充一点,我有多个消费者(不同的group.id
)消费来自同一个经纪人,不知道这是不是问题。
答案 0 :(得分:1)
确保,
没有。主题中的分区> =中的消费者实例数 组
否则,组中的某些消费者实例将不会被分配任何分区。
要检查分区数,请使用kafka-topics.sh命令
> sh kafka-topics.sh --zookeeper localhost:2181 --topic test --describe
Topic:test PartitionCount:6 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: test Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: test Partition: 2 Leader: 0 Replicas: 0 Isr: 0
Topic: test Partition: 3 Leader: 0 Replicas: 0 Isr: 0
Topic: test Partition: 4 Leader: 0 Replicas: 0 Isr: 0
Topic: test Partition: 5 Leader: 0 Replicas: 0 Isr: 0
答案 1 :(得分:0)
我仍然不确定问题是什么,但通过删除zookeeper数据文件夹和所有kafka日志,消费者/生产者开始按预期工作。我认为这可能与我删除日志文件以清除主题而不使用正式的kafka管理工具删除主题的问题有关。