最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

kafka監(jiān)聽問題的解決和剖析

 更新時間:2020年12月03日 11:31:42   作者:知曉汝名,嚇吾一跳!  
這篇文章主要給大家介紹了關于kafka監(jiān)聽問題的解決和剖析的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

問題如下:

  1. kafka為什么監(jiān)聽不到數(shù)據(jù)
  2. kafka為什么會有重復數(shù)據(jù)發(fā)送
  3. kafka數(shù)據(jù)重復如何解決
  4. 為什么kafka會出現(xiàn)倆個消費端都可以消費問題
  5. kafka監(jiān)聽配置文件 

一. 解決問題一(kafka監(jiān)聽不到數(shù)據(jù))

  首先kafka監(jiān)聽不得到數(shù)據(jù),檢查如下

  • 檢查配置文件是否正確(可能會出現(xiàn)改了監(jiān)聽地址,監(jiān)聽Topic,監(jiān)聽的地址的數(shù)量問題)
  • 檢查接收數(shù)據(jù)的正確性(比如原生的代碼,可能是用byte序列化接收的數(shù)據(jù),而你接收使用String。也是配置文件序列化問題,還有與發(fā)送者商量問題)
  • 檢查kafka版本問題(一般的版本其實是沒什么問題的,只有個別版本會出現(xiàn)監(jiān)聽不到問題)
  • 沒有加
    @Component    犯了最不應該出差錯的問題

  如果出現(xiàn)監(jiān)聽不到數(shù)據(jù)的問題,那么就試試更改方法一二,如果不可以在去試試方法三,之前出現(xiàn)這個問題也是查過 一般查到都會說  “低版本的服務器接收不到高版本的生產(chǎn)者發(fā)送的消息”,但是凈由測試使用 用1.0.5RELEASE 和 2.6.3反復測試,并沒有任何的問題。

如果按照版本一致,那么根本就不現(xiàn)實,因為可能不同的項目,springboot版本不一致的話,可能有的springboot版本低,那么你還得要求自己維護項目版本升級?如果出現(xiàn)第四種情況就無話可說了。

二. 解決問題二(kafka為什么會有重復數(shù)據(jù)發(fā)送)

  重復數(shù)據(jù)的發(fā)送問題如下

  1. 可能在發(fā)送者的那里的事務問題。mysql存儲事務發(fā)生異常導致回滾操作,但是kafka消息卻是已經(jīng)發(fā)送到了服務器中。此事肯定會出現(xiàn)重復問題
  2. 生產(chǎn)者設置時間問題,生產(chǎn)發(fā)送設置的時間內(nèi),消息沒完成發(fā)送,生產(chǎn)者以為消費者掛掉,便重新發(fā)送一個,導致重復
  3. offset問題,當項目重啟,offset走到某一個位置已扔到kafka服務器中,但是項目被重啟.那么offset會是在原本重啟的那一個點的地方再次發(fā)送一次,這是kafka設計的問題,防止出現(xiàn)丟失數(shù)據(jù)問題

三. 解決問題三(kafka數(shù)據(jù)重復如何解決)

  目前我是使用的Redis進行的排重法,用的是Redis中的set,保證里面不存在重復,保證Redis里面不會存入太多的臟數(shù)據(jù)。并定期清理

  粘貼一下我的排重(Redis排重法)

//kafka prefix
  String cache = "kafka_cache";
  //kafka suffix
  Calendar c = Calendar.getInstance();
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  //0點,目前是為了設置為這一天的固定時間。這個完全可以去寫個工具類自己弄,為了看的更清楚,麻煩了一點的寫入
  SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
  String gtimeStart = sdf2.format(c.getTime());
  long time = sdf.parse(gtimeStart).getTime();


  //此位置為了設置是否是新的一天,新的一天需要設置定時時間,保證redis中不會存儲太多無用數(shù)據(jù)
  Boolean flag = false;
  //數(shù)據(jù)接收
  Set<String> range = new HashSet<>();
  //判斷是否存在
  if (redisTemplate.hasKey(cache + time)) {
  //存在則取出這個set
  range = redisTemplate.opsForSet().members(cache + time);
  }else {
  //不存在,則為下面過期時間的設置鋪墊
  flag = true;
  }
  //判斷監(jiān)聽到的數(shù)據(jù)是否是重復
  if (range.contains("測試需要")) {
  //重復則排出,根據(jù)邏輯自己修改
  continue;
  } else {
  //添加進去
  redisTemplate.opsForSet().add(cache + time, i+"");
  if (flag){
   //設置為24小時,保證新一天使用,之前使用的存儲會消失掉
   redisTemplate.expire(cache + time,24,TimeUnit.HOURS);
   //不會在進入這個里面,如果多次的存入過期時間,那么這個key的過期時間就永遠是24小時,一直就不會過期
   flag = false;
  }
  }

四. 解決問題四(為什么kafka會出現(xiàn)倆個消費端都可以消費問題)

  原因是因為在不同groupId之下,kafka接收到以后,會給監(jiān)聽他的每一個組發(fā)送一個他所收到的消息,但是兩個消費端監(jiān)聽同一個租,那么就只有一個消費端可以消費到。

五. 粘一下我的監(jiān)聽配置文件

# 指定kafka 代理地址,可以多個,用逗號間隔
spring.kafka.bootstrap-servers= localhost:9092
# 指定默認消費者group id
spring.kafka.consumer.group-id= test
# 是否自動提交
spring.kafka.consumer.enable-auto-commit= true
# 提交間隔的毫秒
spring.kafka.consumer.auto-commit-interval.ms=60000
# 最大輪詢的次數(shù)
spring.kafka.consumer.max-poll-records=1
# 將偏移量重置為最新偏移量
spring.kafka.consumer.auto-offset-reset=earliest
# 指定消息key和消息體的編解碼方式
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

總結(jié)

到此這篇關于kafka監(jiān)聽問題的解決和剖析的文章就介紹到這了,更多相關kafka監(jiān)聽問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • Java基礎之命名規(guī)范的詳解

    Java基礎之命名規(guī)范的詳解

    這篇文章主要介紹了Java基礎之命名規(guī)范的詳解,文中有非常詳細的代碼示例,對正在學習Java基礎的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • java實現(xiàn)非法訪問異常示例

    java實現(xiàn)非法訪問異常示例

    創(chuàng)建ExceptionTest類,在該類的main()方法中,使用反射獲得String類的所有域,不要使用setAccessible方法修改這些域的可見性,然后通過反射獲得私有域中與”hash”相匹配的int值,并使用try-catch語句塊捕獲非法訪問異常
    2014-02-02
  • Spring Boot 中使用cache緩存的方法

    Spring Boot 中使用cache緩存的方法

    Spring Cache是Spring針對Spring應用,給出的一整套應用緩存解決方案。下面小編給大家?guī)砹薙pring Boot 中使用cache緩存的方法,感興趣的朋友參考下吧
    2018-01-01
  • 舉例講解Java中的多線程編程

    舉例講解Java中的多線程編程

    這篇文章主要介紹了舉例講解Java中的多線程編程,線程是Java學習中的重要知識,需要的朋友可以參考下
    2015-09-09
  • IDEA2023 Maven3.9.1+Tomcat10.1.8配置并搭建Servlet5.0的框架實現(xiàn)

    IDEA2023 Maven3.9.1+Tomcat10.1.8配置并搭建Servlet5.0的框架實現(xiàn)

    本文主要介紹了IDEA2023 Maven3.9.1+Tomcat10.1.8配置并搭建Servlet5.0的框架實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • java測試框架的方法

    java測試框架的方法

    這篇文章主要介紹了java測試框架的方法,文中代碼非常詳細,供大家學習和參考,感興趣的朋友可以了解下
    2020-06-06
  • Java使用opencv識別二維碼的完整步驟

    Java使用opencv識別二維碼的完整步驟

    OpenMV是一個開源,低成本,功能強大的機器視覺模塊,下面這篇文章主要給大家介紹了關于Java使用opencv識別二維碼的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • MyBatisPlus 封裝分頁方法示例

    MyBatisPlus 封裝分頁方法示例

    本文主要介紹了基于MybatisPlus的分頁插件封裝,包括分頁結(jié)果對象、查詢對象的封裝,以及對象轉(zhuǎn)換處理,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • Java中如何實現(xiàn)不可變Map詳解

    Java中如何實現(xiàn)不可變Map詳解

    這篇文章主要給大家介紹了關于Java中如何實現(xiàn)不可變Map的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作工具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流

    SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流

    這篇文章主要介紹了SpringCloud Zuul過濾器和谷歌Gauva實現(xiàn)限流,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03

最新評論

法库县| 双牌县| 静安区| 道孚县| 上饶市| 尼木县| 齐齐哈尔市| 顺昌县| 大石桥市| 恩平市| 兴文县| 镇雄县| 驻马店市| 九龙城区| 阿巴嘎旗| 囊谦县| 舞阳县| 会昌县| 宁蒗| 拜城县| 曲麻莱县| 桑植县| 瑞昌市| 东乌珠穆沁旗| 宁都县| 香港 | 苗栗市| 富阳市| 凉城县| 乌什县| 莲花县| 合江县| 肥城市| 涞水县| 锡林浩特市| 汤原县| 曲松县| 乐东| 襄樊市| 宁城县| 永仁县|