簡體   English   中英

消息未傳遞給 Kafka 主題

[英]Message is not passing to Kafka topic

我正在開發一個簡單的應用程序,使用 spring boot 和 Kafka 將對象保存到 Kafka 主題,然后有一個消費者將監聽並將該記錄添加到內存數據庫中。 在以下配置之后,Kafka 和 spring boot 都可以工作,但是對 Kafka 的 API 調用將掛起一段時間,並且 Kafka 主題中也不會有任何消息。

我跟着下面的教程

https://www.confluent.io/blog/apache-kafka-spring-boot-application/

但是我稍微改變了我的服務。

package com.dilshan.shoppingcart.cart;

import org.springframework.stereotype.Service;

import java.io.IOException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.core.KafkaTemplate;

@Service
public class ShoppingService {
    private static final String TOPIC = "users";

    @Autowired
    private KafkaTemplate<String, ShoppingCart> kafkaTemplate;

    private ShoppingCartRepository cartRepository;

    public void publish(ShoppingCart cart) {
        this.kafkaTemplate.send(TOPIC, cart);
    }

    @KafkaListener(topics = "users", groupId = "group_id")
    public void subscribe(ShoppingCart cart) throws IOException {
        System.out.println("Hello-"+cart.getId());
        cartRepository.save(cart);

    }

}

這是我的 application.properties 文件

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.h2.console.path=/h2
server.port=8080
spring.kafka.consumer.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=group_id
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.listener.missing-topics-fatal=false

這是我用來訪問 kafka 方法的控制器。

package com.dilshan.shoppingcart.cart;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ShoppingCartController {

    @Autowired
    private ShoppingService shoppingService;

    @RequestMapping(method = RequestMethod.POST, value = "/shoppingcart")
    private ResponseEntity<ShoppingCart> selectProducts( @RequestBody ShoppingCart cart) {
        shoppingService.publish(cart);
        return ResponseEntity.ok().build();
    }

}

以下日志不斷顯示在應用程序日志中。

2020-02-18 19:22:12.951[0;39m [33m WARN[0;39m [35m6986[0;39m [2m---[0;39m [2m[ntainer#0-0-C-1][0;39m [36morg.apache.kafka.clients.NetworkClient  [0;39m [2m:[0;39m [Consumer clientId=consumer-1, groupId=group_id] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[2m2020-02-18 19:22:13.958[0;39m [33m WARN[0;39m [35m6986[0;39m [2m---[0;39m [2m[ntainer#0-0-C-1][0;39m [36morg.apache.kafka.clients.NetworkClient  [0;39m [2m:[0;39m [Consumer clientId=consumer-1, groupId=group_id] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[2m2020-02-18 19:22:15.115[0;39m [33m WARN[0;39m [35m6986[0;39m [2m---[0;39m [2m[ntainer#0-0-C-1][0;39m [36morg.apache.kafka.clients.NetworkClient  [0;39m [2m:[0;39m [Consumer clientId=consumer-1, groupId=group_id] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[2m2020-02-18 19:22:16.272[0;39m [33m WARN[0;39m [35m6986[0;39m [2m---[0;39m [2m[ntainer#0-0-C-1][0;39m [36morg.apache.kafka.clients.NetworkClient  [0;39m [2m:[0;39m [Consumer clientId=consumer-1, groupId=group_id] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.

Kafka 代理,有時稱為 Kafka 服務器,應該在您的 PC 或遠程機器上運行。

請檢查此鏈接https://kafka.apache.org/quickstart

首先,您需要運行 Zookeeper 和 Kafka broker,然后您可以使用您的應用程序發送消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM