一次线上kafka消费问题排查

业务使用maxwell监听数据库的binlog日志,然后发送到kafka,经过这些日志进行业务逻辑的处理。

问题:线上的这段业务没有进行执行。

猜测1、由于前段时间进行了数据库表的字段转移,把两个字段从上层表order下放到了下层表advert,以为是这段代码进行改写的时候没能覆盖逻辑。

看了代码之后,去沙箱环境进行测试,发现能够正常执行逻辑。

猜测2、怀疑是线上监听的topic不匹配。

首先查看nacos中的项目配置kafka的server地址和topic名称,然后再去线上maxwell查看配置的kafka的server地址和topic名称,发现没问题。

猜测3、kafka的有问题。

在kafka及群里监听消费topic消息

./kafka-console-consumer.sh --bootstrap-server server --topic topicName

发现消息消费没有问题。

猜测4、topic的消费组有问题

<1>首先查看topic的信息

```shell

[www@kafka1 bin]$ ./kafka-topics.sh --bootstrap-server 10.2.32.122:9092 --topic maxwell-topic-online --describe
Topic:maxwell-topic-online PartitionCount:1 ReplicationFactor:1 Configs:segment.bytes=1073741824
Topic: maxwell-topic-online Partition: 0 Leader: 2 Replicas: 2 Isr: 2
[www@kafka1 bin]$

```

发现topic的paritition为1个

<2>查看消费组下面的消费者信息

```shelll

[www@kafka1 bin]$ ./kafka-consumer-groups.sh --bootstrap-server 10.2.32.122:9092 --group openApi_monitor_binlog --describe

TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
maxwell-topic-online 0 316986739 316986739 0 consumer-1-664b8ac2-f617-4471-8cbb-9b667da830e8 /10.2.33.66 consumer-1
[www@kafka1 bin]$

```

通过host找到这台服务器。

发现这个是另外一台废弃的服务器上的老代码进行了启动。

因为kafka中topic的一个parition只能由有个consumer进行消费,所以线上项目消费不到现在的消息。

解决方案:

把废弃服务器上的项目kill掉,触发kafka中topic的rebanlance,把分区分配给现在线上的消费者。

测试:

这个问题解决。

回顾:

和运维同学进行沟通,废弃服务器进行回收,防止老代码影响线上服务的正常运行。

 

上一篇:SpringBoot2.x 整合Kafka


下一篇:Pulsar Message 订阅类型