[英]Spring Kafka. Not started EmbeddedKafkaBroker
I am coding Kafka Broker and Consumer to catch messages from the application.我正在编写 Kafka Broker 和 Consumer 代码以捕获来自应用程序的消息。 When trying to get messages from Consumer, an error occurs
尝试从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)
On the application side (Producer), there is also a connection error在应用端(Producer),也出现了连接错误
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.
My project has the following dependencies:我的项目具有以下依赖项:
compile "org.springframework.kafka:spring-kafka-test:2.4.4.RELEASE"
compile "org.springframework.kafka:spring-kafka:2.4.4.RELEASE"
Code of My Kafka Broker我的卡夫卡经纪人代码
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));
}
}
Please help to deal with the situation.请帮助处理这种情况。 I am not good at kafka architecture and how it can be implemented on Spring.
我不擅长 kafka 架构以及如何在 Spring 上实现它。
If you are using spring then you need to annotate your bean with @EmbeddedKafka and then use @Autowire on EmbeddedKafkaBroker如果您使用的是 spring,那么您需要使用@EmbeddedKafka注释您的 bean,然后在 EmbeddedKafkaBroker 上使用@Autowire
Example embeded kafka annotation configuration:嵌入 kafka 注释配置示例:
@EmbeddedKafka(
partitions = 1,
controlledShutdown = false,
brokerProperties = {// place your proerties here
})
What I would do is to create a spring bean KafkaServerConfig and place all my logic for configuration and bean construction inside.我要做的是创建一个 spring bean KafkaServerConfig并将我所有的配置和 bean 构建逻辑放在里面。
PS: it should be noted that EmbeddedKafkaBroker is intended for unit tests. PS:需要注意的是 EmbeddedKafkaBroker 是用于单元测试的。
The EmbeddedKafkaBroker
is designed to be used from a Spring application context or by a JUnit4 @Rule
or @ClassRule
or by a JUnit5 Condition
. EmbeddedKafkaBroker
旨在从 Spring 应用程序上下文或 JUnit4 @Rule
或@ClassRule
或 JUnit5 Condition
。
To use it outside those environments, you must call afterPropertiesSet()
to initialize it and destroy()
to shut it down.要在这些环境之外使用它,您必须调用
afterPropertiesSet()
来初始化它并调用destroy()
来关闭它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.