kafka启动之后,一段时间后自动关闭

kafka启动之后,一段时间后自动关闭

kafka启动之后,一段时间后自动停止,出现这种情况一般是没有使用守护进程 -daemon 启动kafka。
①第一种情况:

[cluster@hadoop102 kafka_2.11-0.11.0.2]$ bin/kafka-server-start.sh -daemon config/server.properties 

原因请参考/opt/module/kafka_2.11-0.11.0.2/bin下的kafka-run-class.sh 文件。

# Launch mode
#使用-daemon启动
if [ "x$DAEMON_MODE" = "xtrue" ]; then
  nohup $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
else
#不使用-daemon启动
  exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"
fi

②、还有一种情况是上次kafka没有正常退出,即kafka还没有关闭就关闭了zookeeper。
查看kafka启动日志,一般在kafka/logs目录下的server.log文件。
报错信息如下:

[2020-02-02 00:02:04,660] INFO Result of znode creation is: NODEEXISTS (kafka.utils.ZKCheckedEphemeral)
[2020-02-02 00:02:04,663] FATAL [Kafka Server 3], Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.RuntimeException: A broker is already registered on the path /brokers/ids/3. This probably indicates that you either have configured a brokerid that is already in use, or else you have shutdown this broker and restarted it faster than the zookeeper timeout so it appears to be re-registering.
	at kafka.utils.ZkUtils.registerBrokerInZk(ZkUtils.scala:417)
	at kafka.utils.ZkUtils.registerBrokerInZk(ZkUtils.scala:403)
	at kafka.server.KafkaHealthcheck.register(KafkaHealthcheck.scala:70)
	at kafka.server.KafkaHealthcheck.startup(KafkaHealthcheck.scala:50)
	at kafka.server.KafkaServer.startup(KafkaServer.scala:280)
	at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
	at kafka.Kafka$.main(Kafka.scala:65)
	at kafka.Kafka.main(Kafka.scala)

解决方法;
停掉kafka,启动zkCli.sh,删除对应的节点。

[atguigu@hadoop102 jobs]$ zkCli.sh 
[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids
[1]
[zk: localhost:2181(CONNECTED) 2] rmr /brokers/ids
[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids
[]

然后。。。
当然是重新启动kafka了,一般到了这里问题就解决了。

如果有不足之处,还请大家多多指正。

### Spring Boot 中集成 Kafka 的方法及其启动流程 在 Spring Boot 应用程序中集成 Apache Kafka 是一种常见的需求,用于实现消息驱动架构中的事件发布/订阅模式。以下是关于如何配置和初始化 Kafka 集成的详细说明。 #### 1. 添加依赖项 为了使 Spring Boot 支持 Kafka 功能,需要引入 `spring-boot-starter-kafka` 依赖项到项目的构建文件中。对于 Maven 用户: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-kafka</artifactId> </dependency> ``` Gradle 用户可以使用以下语句: ```gradle implementation 'org.springframework.boot:spring-boot-starter-kafka' ``` 此操作会自动导入必要的库来支持 Kafka 生产者和消费者功能[^3]。 #### 2. 配置 Kafka 属性 通过应用属性文件 (`application.properties`) 或 YAML 文件 (`application.yml`) 来定义 Kafka 连接参数。例如,在 `application.properties` 中设置如下内容: ```properties spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=my-group spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer ``` 这些配置指定了 Kafka broker 地址、消费者的组 ID 和偏移量重置策略等重要选项[^4]。 #### 3. 创建生产者组件 创建一个简单的 Kafka 消息发送器类以便于应用程序向指定主题广播数据包。下面是一个典型的例子: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; @Service public class KafkaProducer { @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topicName, String message){ kafkaTemplate.send(topicName,message); } } ``` 上述代码片段展示了如何利用 Spring 提供的模板对象简化了消息传递过程[^5]。 #### 4. 定义消费者逻辑 同样地,也需要编写接收端处理业务的方法论。这里给出一段示范性的 Consumer Bean 实现方式: ```java import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @Component public class KafkaConsumer { @KafkaListener(topics = "test-topic", groupId = "my-group") public void consumeMessage(String message) { System.out.println("Received Message: " + message); } } ``` 注意这里的监听注解标记了目标 Topic 名字以及所属 Group-ID 参数值[^6]。 #### 启动流程概述 当运行基于以上结构搭建起来的应用实例时,Spring Framework 将按照预定顺序完成下列动作序列: - 加载全局上下文中声明的服务 bean; - 初始化并注册 ProducerFactory 及 ListenerContainerFactory 到 IOC 容器里头去; - 开始轮询远程服务器上的 Topics 数据流直到关闭为止[^7]。 另外值得注意的是,虽然单个日志副本可能只涉及单一分区管理问题[^2],但在实际部署环境下往往存在大量此类单元分布在整个集群之中,因此合理规划资源分配显得尤为重要。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值