我已经使用以下docker-compose.yml运行了本地kafka
version: '2'
services:
zookeeper:
image: "confluentinc/cp-zookeeper:5.0.1"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka:
image: "confluentinc/cp-enterprise-kafka:5.0.1"
ports:
- '9092:9092'
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 100
尝试在Scala中使用kafka-client 2.1.0运行基本的创建主题:
val props = new Properties()
props.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
val adminClient: AdminClient = AdminClient.create(props)
val newTopic = new NewTopic("test", 1, 1.toShort)
val topicsF = adminClient.createTopics(List(newTopic).asJavaCollection)
val result = topicsF.all().get()
但是一段时间后我得到:
org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
我可以使用命令行创建主题:
kafka-topics --create \
--zookeeper localhost:2181 \
--replication-factor 1 \
--partitions 1 \
--topic test
Created topic "test".
kafka AdminClient API Timed out waiting for node assignment描述了一个使用Java的类似问题,但是该注释表明系统重新启动可以解决此问题,而我这不是这种情况。
答案 0 :(得分:6)
如果您在Docker(或类似版本)中运行Kafka,则需要正确配置侦听器。 This article对其进行了详细说明。
Here's an example的Docker Compose,可用于从主机访问Kafka。
免责声明:我写了这篇文章:)
答案 1 :(得分:1)
作为@suh pointed out。
一种更简单的方法是在第 server.properties
行取消注释 kafka :listeners=PLAINTEXT://localhost:9092
,它应该可以工作。
答案 2 :(得分:0)
我认为localhost
是问题所在。在您的bootstrap-servers
属性中,使用您在撰写文件中定义的播发主机(192.168.99.100),而不是localhost
,应该可以。