- 沒有禁用"自動創建topic"的功能
已經增加參數auto.create.topics.enable=false,否則任何人只要發數據給kafka,沒有對應的topic都會自動創建,一旦生產者多了會亂套。
- 數據保留週期過短
已經修改爲3天,log.retention.hours=72。默認是3小時,阿里雲的破環境有時候網絡出問題就得三小時,來不及消費的消息就沒了。
- 節點有點少(一主一備,最小集羣得3個,暫時2個也能玩)
咱們kafka broker就2個節點,創建topic一般會配置副本因爲爲1,副本和主本一般應該在不同的機器上,否則從數據冗餘角度來說沒啥意義。
- data目錄跟mariadb的數據目錄混在一起了
我重啓kafka發現起不來,原因是數據目錄下放了mariadb的數據,啓動時kafka認爲是一個topic的分區,結果檢查數據發現不對就直接退出了。
由log.dirs=/data改爲了log.dirs=/data/kafka
- 消費者無法消費的問題
這個問題有點隱蔽,打開host.name配置就好,在每個broker分配打開配置:host.name=10.45.41.173(各節點用自己的IP),原因如下:
我們知道配置consumer時只需要提供zookeeper信息即可,consumer會從zk獲取broker、topic、partition信息的。
而zk裏存的這些信息是broker啓動起來之後寫到zk裏的,broker有個配置項advertised.host.name,broker就是把它的值寫到了zk。
advertised.host.name如果不配置,他會等於host.name的值,前提是host.name配置打開了,否則host.name的值就是java.net.InetAddress.getCanonicalHostName 的值,在mac上、windows上這個值返回IP,但在linux上這個值就是 hostname 的值。
一旦zk裏存的是broker的hostname,而producers和consumers的/etc/hosts文件又沒改,那他沒法完成從hostname到IP的映射,因此就不能生產和消費。
- 已有topic的partition有點少
partition都只有2個,創建topic時可以多一點,比如16個,消費的時候一個partition對應一個線程比較合適