Java 春天卡夫卡。未启动嵌入式Kafkabroker

Java 春天卡夫卡。未启动嵌入式Kafkabroker,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,我正在对Kafka Broker和Consumer进行编码,以捕获来自应用程序的消息。尝试从使用者获取消息时,会发生错误 java.net.ConnectException: Connection refused: no further information at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(Socke

我正在对Kafka Broker和Consumer进行编码,以捕获来自应用程序的消息。尝试从使用者获取消息时,会发生错误

java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:50)
    at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:216)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:531)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:483)
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:540)
    at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:262)
    at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:233)
    at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:212)
    at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.java:230)
    at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:444)
    at org.apache.kafka.clients.consumer.KafkaConsumer.updateAssignmentMetadataIfNeeded(KafkaConsumer.java:1267)
    at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1231)
    at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1211)
    at org.springframework.kafka.test.utils.KafkaTestUtils.getRecords(KafkaTestUtils.java:303)
    at org.springframework.kafka.test.utils.KafkaTestUtils.getRecords(KafkaTestUtils.java:280)
在应用程序端(生产者),还有一个连接错误

2020-03-25 12:29:33.689  WARN 25786 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1, transactionalId=tx0] Connection to node -1 (<here broker hostname>:9092) could not be established. Broker may not be available.
我的卡夫卡经纪人代码

public class KafkaServer {

    private static final String BROKERPORT = "9092";
    private static final String BROKERHOST = "localhost";
    public static final String TOPIC1 = "fss-fsstransdata";
    public static final String TOPIC2 = "fss-fsstransscores";
    public static final String TOPIC3 = "fss-fsstranstimings";
    public static final String TOPIC4 = "fss-fssdevicedata";
    @Getter
    private Consumer<String, String> consumer;

    private EmbeddedKafkaBroker embeddedKafkaBroker;

    public void run() {

        String[] topics = {TOPIC1, TOPIC2, TOPIC3, TOPIC4};

        this.embeddedKafkaBroker = new EmbeddedKafkaBroker(
                1,
                false,
                1,
                topics
        ).kafkaPorts(BROKERPORT);

        Map<String, Object> configs = new HashMap<>(KafkaTestUtils.consumerProps("consumer", "false", this.embeddedKafkaBroker));
        this.consumer = new DefaultKafkaConsumerFactory<>(configs, new StringDeserializer(), new StringDeserializer()).createConsumer();

        this.consumer.subscribe(Arrays.asList(topics));
    } 
}
公共类KafkaServer{
私有静态最终字符串BROKERPORT=“9092”;
私有静态最终字符串BROKERHOST=“localhost”;
公共静态最终字符串TOPIC1=“fss fsstransdata”;
公共静态最终字符串TOPIC2=“fss fsstranscores”;
公共静态最终字符串TOPIC3=“fss FSSTRANSTINGS”;
公共静态最终字符串TOPIC4=“fss fssdevicedata”;
@吸气剂
私人消费者;
私人嵌入卡夫卡布洛克嵌入卡夫卡布洛克;
公开募捐{
字符串[]主题={TOPIC1,TOPIC2,TOPIC3,TOPIC4};
this.embeddedKafkaBroker=新的embeddedKafkaBroker(
1.
假,,
1.
话题
).卡夫卡波特(BROKERPORT);
Map configs=newhashmap(KafkaTestUtils.consumerProps(“consumer”,“false”,this.embeddedKafkaBroker));
this.consumer=new DefaultKafkaConsumerFactory(configs,new StringDeserializer(),new StringDeserializer()).createConsumer();
this.consumer.subscribe(Arrays.asList(topics));
} 
}

请帮助处理这种情况。我不擅长卡夫卡体系结构以及如何在Spring上实现它。

如果使用Spring,则需要使用@EmbeddedKafka注释bean,然后在EmbeddedKafkaBroker上使用@Autowire

嵌入卡夫卡注释配置示例:

@EmbeddedKafka(
    partitions = 1, 
    controlledShutdown = false,
    brokerProperties = {// place your proerties here
})
我要做的是创建一个SpringbeanKafkaServerConfig,并将配置和bean构造的所有逻辑放在其中


PS:需要注意的是,EmbeddedKafkaBroker用于单元测试。

EmbeddedKafkaBroker设计用于从Spring应用程序上下文或JUnit4
@Rule
@ClassRule
或JUnit5
条件使用


要在这些环境之外使用它,您必须调用
AfterPropertieSet()
对其进行初始化,然后调用
destroy()
将其关闭。

顺便说一句,卡夫卡消费者与卡夫卡经纪人不同。你好,亚历山大,谢谢你的回答!不使用注释和DI就可以完成所有这些吗?我不想创建spring上下文,而是在代码中手动创建所有需要的对象。p、 我需要一个卡夫卡存根来验证从向卡夫卡发送消息的应用程序发送的消息的正确性,没有别的,加里!谢谢你的回答。在EmbeddedKafkaBroker创建之后,我使用了AfterPropertieSet(),问题“java.net.ConnectException:连接被拒绝”消失了。我的存根仍然没有收到来自应用程序的消息,并且没有错误,但这是另一个故事)欢迎使用堆栈溢出!看看您是否在测试用例中使用它,不接收消息的最常见原因是因为它是在消费者分配分区之前发送的。将
ConsumerConfig.AUTO\u OFFSET\u RESET\u CONFIG
设置为
最早的
-默认情况下,它是
最新的
,因此在分配时不会获得主题中已有的任何记录。不,我的问题是制作人无法连接到卡夫卡代理,我配置了一些错误的内容。我决定尝试将kafka服务器部署在一个linux测试台上,并向其发送消息)
@EmbeddedKafka(
    partitions = 1, 
    controlledShutdown = false,
    brokerProperties = {// place your proerties here
})