[英]Kafka Producer does not write to kafka topic
抱歉,沒有菜鳥問題:我正在使用Akka寫信給kafka,但在kafka控制台使用者中看不到它。
用於寫入kafka的配置:
kafka {
bootstrap.servers = "localhost:9002"
auto.offset.reset = "earliest"
}
我有使用akka寫到kafka主題的代碼:
class ServiceKafkaProducer(topicName: String, actorSystem: ActorSystem, configuration: Configuration) {
val bootstrapServers: String = configuration
.getString("kafka.bootstrap.servers")
.getOrElse(
throw new Exception("No config element foe kafka.bootstrap.servers")
)
val producerSettings: ProducerSettings[String, String] = ProducerSettings(
actorSystem,
new StringSerializer,
new StringSerializer
).withBootstrapServers(bootstrapServers)
val producer: KafkaProducer[String, String] = producerSettings.createKafkaProducer()
def send(logRecordStr: String): Unit = {
Logger.debug(s"Inside ServiceKafkaProducer, writing to $topicName")
Logger.debug(logRecordStr)
producer.send(
new ProducerRecord(topicName, logRecordStr)
)
}
}
def createTag(text: String, createdBy: UUID): Unit = {
Logger.debug("Inside TagEventProducer#createTag")
val tagId = UUID.randomUUID()
val event = TagCreated(tagId, text, createdBy)
println(event)
val record = createLogRecord(event)
send(record.encode)
}
日志
```[debug] - application - Inside TagEventProducer#createTag
TagCreated(d393d223-9eb6-45e3-8610-56a3f65c84cc,scala,f5b61ca0-0ccc-4064-94c1-cba2a5a4087b)
[debug] - application - Inside ServiceKafkaProducer, writing to tags
[debug] - application - {"id":"ed27f0d1-6b6c-469b-af97-1929dc6a5cc7","action":"tag-created","data":{"id":"d393d223-9eb6-45e3-8610-56a3f65c84cc","text":"scala","createdBy":"f5b61ca0-0ccc-4064-94c1-cba2a5a4087b"},"timestamp":1542776716868}```
(編輯)我正在使用spotify docker鏡像運行kafka,如下所示:
version: '3.5'
services:
kafka:
image: 'spotify/kafka'
hostname: kafka
environment:
- ADVERTISED_HOST=kafka
- ADVERTISED_PORT=9092
ports:
- "9092:9092"
- "2181:2181"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- kafka_net
kafkaManager:
image: 'sheepkiller/kafka-manager'
environment:
- ZK_HOSTS=kafka:2181
- APPLICATION_SECRET=letmein
ports:
- "8000:8000"
networks:
- kafka_net
networks:
kafka_net:
name: my_network
首先,您在生產者中使用了錯誤的端口(9002而不是9092)。 嘗試在生產者中使用bootstrap.servers = kafka:9092
而不是localhost:9002
,因為您宣傳的主機設置為kafka
您確定要寫入Kafka的配置如下嗎?
bootstrap.servers = "localhost:9002"
auto.offset.reset = "earliest"
我認為應該是localhost:9092
。 您可能在這里輸入了錯字。
將kafka.bootstrap.servers
設置為{kafka_docker_host_api}:9092
。 如果您的問題無法解決,請嘗試使用producer.flush()
。 Kafka生產者不會立即發送消息。 因此,如果要強制發送消息,則需要刷新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.