kafka好像丢数据了

场景描述:

       之前看法中遇到一个奇怪的问题(知道原因也就不奇怪了),线上有客户说没有收到推送的数据,我就赶紧查发送记录,发现也是有记录,很奇怪,最后通过补发机制给客户重发。后来又有客户提出数据丢失,这次就认真的排查问题了,发现那个时间段管理kafka的同事在做切换升级,有时候会导致不稳定。但奇怪如果发生kafka失败为什么没报错呢?

原代码

kafkaTemplate.send(topic, JSON.toJSONString(map));

改后代码

kafkaTemplate.send(topic, JSON.toJSONString(map)).get();

通过get()方法可打印出发生kafka是抛出的异常。这样就能及时发现kafka集群是否健康,健康状态kafka是是不丢数据的,顺序生产和消费。

也可通过回调函数来半段kafak是否发生成功

      ListenableFuture listenableFuture = kafkaTemplate.send(topic, JSON.toJSONString(map));
      SuccessCallback successCallback =
          new SuccessCallback() {
            @Override
            public void onSuccess(Object result) {
              log.info("任务分配kafka发送成功,uuid:" + uuid);
            }
          };
      FailureCallback failureCallback =
          new FailureCallback() {
            @Override
            public void onFailure(Throwable ex) {
              log.error("任务分配kafka发送失败,uuid:" + uuid);
            }
          };
      listenableFuture.addCallback(successCallback, failureCallback);

 

你可能感兴趣的:(消息传输)