一次线上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,把分区分配给现在线上的消费者。
测试:
这个问题解决。
回顾:
和运维同学进行沟通,废弃服务器进行回收,防止老代码影响线上服务的正常运行。