kafka配置、启动、常见问题

本文介绍了Kafka的安装、启动、生产消息和消费消息的操作。安装需从官网下载并解压文件,启动要先启动zk再启动Kafka。同时给出了生产和消费消息的命令。此外,还针对Java客户端不打印日志、Kafka无法启动、非安装机器不能连接等常见问题提供了解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎使用Markdown编辑器

安装

  1. 从官网下载kafka_2.12-2.0.0.tgz
  2. 将kafka_2.12-2.0.0.tgz解压到指定目录,如/opt/kafka_2.12-2.0.0

启动

  1. 启动zk
cd /opt/kafka_2.12-2.0.0/bin
./zookeeper-server-start.sh ../config/zookeeper.properties
  1. 启动kafka
./kafka-server-start.sh ../config/server.properties

生产消息

./kafka-console-producer.sh --broker-list localhost:9092 --topic input-topic

消费消息

./kafka-console-consumer.sh --bootstrap-server 192.168.128.133:9092 --from-beginning --topic input-topic

常见问题

  1. java客户端运行时不打印日志
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details

解决方法,引入slf4j,需要排除掉其他slf4j

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.12</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
        </dependency>
  1. kafka无法启动,之前的进程还存在

使用lsof -i :9092 查看kafka进程,然后手动kill

  1. 非安装机器,不能连接kafka
Group coordinator localhost:9092 (id: 2147483647 rack: null) is unavailable or invalid, will attempt rediscovery

修改config目录下的server.properties文件,去掉

#listeners=PLAINTEXT://:9092

行前的注释,并加上当前机器ip地址

### Kafka 集群常见故障及解决方案 #### 1. **Broker 启动失败** 当尝试启动 Kafka Broker 时,可能会遇到 `kafka.common.KafkaException` 错误。此错误通常是因为绑定地址配置不正确或端口已被占用。 - 解决方案: 检查 `server.properties` 文件中的 `listeners` 和 `advertised.listeners` 参数设置是否正确[^3]。确保指定的 IP 地址和端口号未被其他进程占用。可以通过命令 `netstat -anp | grep 9092` 来确认端口状态。如果发现冲突,则更改配置文件中的监听端口并重启服务。 #### 2. **消费者失去响应** Kafka 使用心跳机制来检测消费者的活跃性。如果消费者未能在设定的时间间隔 (`max.poll.interval.ms`) 内调用 `poll()` 方法,集群会将其视为失活,并触发重新平衡操作。 - 解决方案: 增加 `max.poll.interval.ms` 的值以允许更长的消息处理时间[^2]。或者优化消息处理逻辑,减少单条消息的处理耗时。此外,在业务线程繁忙的情况下,可以引入限流措施以控制消息接收速率[^4]: ```java while (kafkaProtoProcessManage.isBlocked()) { logger.warn("Kafka process list may be blocked, have a rest."); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } ``` #### 3. **分区不可用** 某些情况下,Kafka 分区可能变得不可用(Unavailability),这通常是由于副本同步问题或 Leader 副本失效引起的。 - 解决方案: 通过命令 `bin/kafka-topics.sh --describe --topic <topic-name> --bootstrap-server <broker-address>` 查看分区的状态。如果存在未同步的副本,需调整 `min.insync.replicas` 参数以提高可用性。同时,确保 Zookeeper 正常工作,因为它是管理元数据的核心组件[^1]。 #### 4. **磁盘空间不足** Kafka 是基于磁盘的日志存储系统,因此磁盘容量对于其性能至关重要。一旦磁盘接近满载,写入操作将会变慢甚至停止。 - 解决方案: 定期清理过期的数据,依据保留策略删除旧日志。可通过修改 `log.retention.hours` 或 `log.retention.bytes` 参数实现自动清除功能[^1]。另外,考虑水平扩展集群规模或将部分 Topic 数据迁移到更高容量的节点上。 #### 5. **网络延迟过高** 高网络延迟会影响生产者与消费者之间的通信效率,进而降低整体吞吐量。 - 解决方案: 评估当前网络环境是否存在瓶颈,必要时升级硬件设施或改善拓扑结构。启用压缩算法(如 Snappy、Gzip)能够有效减小传输负载大小。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值