kafka踩坑-kafka能夠連上,但是消費者無消費

object MyKafkaSenderUtil {
    val props = new Properties()
    // Kafka服務端的主機名和端口號
    props.put("bootstrap.servers", "hadoop201:9092,hadoop202:9092,hadoop203:9092")
    // key序列化
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
    // value序列化
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
    
    private val producer: KafkaProducer[String, String] = new KafkaProducer[String, String](props)
    
    def send(topic: String, content: String) = {
        producer.send(new ProducerRecord[String, String](topic, content))
    }
    
    def main(args: Array[String]): Unit = {
        send("order0508","chenchi")
    }
}

上面是kafka生產者代碼, 看着好像沒錯,其實裏面有個大坑,

說下問題 現象,測試的時候想看能否正常生產數據到kafka,結果奇了怪了,控制檯一直不報錯,服務器上kafka一直不消費??

心想可能是kafka客戶端問題,這不簡單,直接在linux上起生產消費,結果正常

看了日誌,看了topic裏面的偏移量,沒問題呀。

後來反覆看,發現問題 是kafka沒有 produce.flush  其實是沒有producer.close

kafka是積累了一批數據到達一定的時數量或者一定時間段後會自動flush,但是我們才生產了1條數據,時間不夠,數量也不夠,所以消息全部積壓了,這個時候需要手動把消息推送到消費端,所以需要flush一下

備註:以前覺得各種連接 con.close 不關會內存泄漏,其實測試的時候不關也沒啥事,但是這個還是不好的習慣

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章