记一次 springboot集成kafka-本地连接服务器的kafka,连接不上的问题

yml中配置了bootstrap-servers: 服务器地址:9092,但是连接时却报了
Connection to node -1 (localhost/127.0.0.1:9092) could not be established.

17:23:08.731 [kafka-admin-client-thread | adminclient-1] WARN  o.a.k.c.NetworkClient - [processDisconnection,782] - [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
17:23:11.738 [kafka-admin-client-thread | adminclient-1] WARN  o.a.k.c.NetworkClient - [processDisconnection,782] - [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
17:23:14.889 [kafka-admin-client-thread | adminclient-1] WARN  o.a.k.c.NetworkClient - [processDisconnection,782] - [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
17:23:18.115 [kafka-admin-client-thread | adminclient-1] WARN  o.a.k.c.NetworkClient - [processDisconnection,782] - [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
17:23:21.010 [kafka-admin-client-thread | adminclient-1] WARN  o.a.k.c.NetworkClient - [processDisconnection,782] - [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
17:23:21.355 [kafka-admin-client-thread | adminclient-1] INFO  o.a.k.c.a.i.AdminMetadataManager - [updateFailed,235] - [AdminClient clientId=adminclient-1] Metadata update failed
org.apache.kafka.common.errors.TimeoutException: Call(callName=fetchMetadata, deadlineMs=1687685001348, tries=1, nextAllowedTryMs=1687685001449) timed out at 1687685001349 after 1 attempt(s)
Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: fetchMetadata
17:23:21.369 [restartedMain] ERROR o.s.k.c.KafkaAdmin - [error,149] - Could not configure topics
org.springframework.kafka.KafkaException: Timed out waiting to get existing topics; nested exception is java.util.concurrent.TimeoutException

chat给我的回复如下,通过一些列检查我确定了在服务器上,kafka没有问题
在这里插入图片描述
最后还是从一篇博客中的第一句话得到了答案,博客链接放在最下方
在这里插入图片描述
我是docker安装的kafka,因此修改配置文件的步骤如下:

docker exec -it ${CONTAINER ID} /bin/bash
vi /opt/kafka/config/server.properties

advertised.listeners=PLAINTEXT://112.126.74.249:9092

在这里插入图片描述

链接: https://www.cnblogs.com/shenyixin/p/17445164.html

1/kafka是一个分布式的消息缓存系统 2/kafka集群中的服务器都叫做broker 3/kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接 4/kafka同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载 5/每一个分区都可以有多个副本,以防止数据的丢失 6/某一个分区中的数据如果需要更新,都必须通过该分区所有副本中的leader来更新 7/消费者可以分组,比如有两个消费者组A和B,共同消费一个topic:order_info,A和B所消费的消息会重复 比如 order_info 中有100个消息,每个消息有一个id,编号从0-99,那么,如果A组消费0-49号,B组就消费50-99号 8/消费者在具体消费某个topic中的消息时,可以指定起始偏移量 每个partition只能同一个group中的同一个consumer消费,但多个Consumer Group可同时消费同一个partition。 n个topic可以被n个Consumer Group消费,每个Consumer Group有多个Consumer消费同一个topic Topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。若创建topic1和topic2两个topic,且分别有13个和19个分区 Kafka的设计理念之一就是同时提供离线处理和实时处理。根据这一特性,可以使用Storm这种实时流处理系统对消息进行实时在线处理,同时使用Hadoop这种批处理系统进行离线处理,还可以同时将数据实时备份到另一个数据中心,只需要保证这三个操作所使用的Consumer属于同的Consumer Group即可。
<think>好的,我现在需要帮助用户了解如何在Spring Boot集成Kafka以实现消息消费。首先,我应该回顾用户提供的引用内容,确保回答准确。用户提供了四个引用,其中提到了配置消费者、动态创建消费者、生产者和消费者的使用方法,以及运行Zookeeper和Kafka服务器的步骤。 第一步,我需要整理出一个清晰的步骤指南。根据引用1,首先要配置和运行Zookeeper和Kafka服务器。然后,引用2和3提到在Spring Boot配置文件中设置消费者参数,比如group id和auto offset reset。同时,引用3还提到了导入依赖包、发送和接收消息的方法。引用4讨论了动态创建消费者的问题,但用户的问题主要是基础配置和使用,所以可能暂时需要深入动态部分,但可以简要提及。 接下来,我需要确保按照用户的要求使用正确的中文和LaTeX格式。例如,变量或配置项如`group-id`应该用$group-id$表示,但根据示例,可能需要用行内代码块更合适,或者根据系统级指令,数学表达式才用$...$。这里配置项属于代码,应该用反引号包裹,比如`group-id`。 然后,用户要求生成相关问题,我需要根据教程内容提出相关的问题,例如性能优化、配置参数作用、多消费者处理等。 在结构上,按照用户示例,先分步骤讲解,包括依赖添加、配置文件设置、消费者监听器的编写、运行服务器和测试。每个步骤需要结合引用内容,比如在配置文件中设置参数时引用[2]和[3]。同时,代码示例要正确,比如使用@KafkaListener注解,并指出其局限性,引用[4]提到动态创建的问题。 最后,检查是否所有引用都被正确标注,例如在提到配置参数时引用[2],在运行服务器步骤引用[1]。确保没有遗漏关键步骤,比如启动Zookeeper和Kafka服务器,这是消费消息的前提条件。 可能需要注意用户提到的系统级指令中的第5点,生成相关问题,所以需要围绕教程内容提出三个相关问题,例如配置参数的作用、多主题消费的方法、以及如何处理消费异常。 总结整个思考过程,需要将各个引用内容整合到步骤中,确保每个步骤都有对应的引用支持,同时保持回答结构清晰,符合用户的要求。</think>### Spring Boot集成Kafka消费者配置与使用教程 #### 1. 环境准备与依赖配置 - **步骤1**:在`pom.xml`中添加Kafka依赖: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 此依赖提供了Spring BootKafka集成支持[^3]。 - **步骤2**:配置Kafka消费者参数(`application.yml`): ```yaml spring: kafka: bootstrap-servers: localhost:9092 consumer: group-id: my-consumer-group auto-offset-reset: earliest key-deserializer: org.apache.kafka.common.serialization.StringDeserializer value-deserializer: org.apache.kafka.common.serialization.StringDeserializer ``` 其中: - `group-id`定义消费者组,同一组内消费者共享消息负载[^2]; - `auto-offset-reset: earliest`表示从最早未消费的偏移量开始读取。 #### 2. 实现消息监听 ```java @Component public class KafkaConsumer { @KafkaListener(topics = "my-topic") public void receiveMessage(String message) { System.out.println("Received: " + message); } } ``` - 使用`@KafkaListener`注解监听指定主题,支持多主题如`topics = {"topic1", "topic2"}`; - 默认情况下,消费者为静态配置,若需动态创建需扩展`ConcurrentKafkaListenerContainerFactory`[^4]。 #### 3. 运行与测试 - **步骤1**:启动Zookeeper与Kafka服务器[^1]: ```bash # 启动Zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties # 启动Kafka bin/kafka-server-start.sh config/server.properties ``` - **步骤2**:使用Kafka生产者发送消息: ```java @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } ``` - **步骤3**:启动Spring Boot应用,消费者将自动订阅并消费消息。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值