天天看點

[喵咪KafKa(3)]PHP拓展See-KafKa[喵咪KafKa(3)]PHP拓展See-KafKa

[喵咪KafKa(3)]PHP拓展See-KafKa[喵咪KafKa(3)]PHP拓展See-KafKa

(simple 簡單 easy 容易 expand 的拓展)

kafka是由apache基金會維護的一個分布式訂閱分發系統,kafka它最初的目的是為了解決,統一,高效低延時,高通量(同時能傳輸的資料量)并且高可用一個消息平台,它是分布式消息隊列,分布式日志,資料傳輸通道的不二之選,但是可惜的時php的拓展實在不是很好用(php-kafka拓展已經長期不維護存在非常多的問題,rdkafkac底層編寫不利于使用),希望可以更加友善的來使用kafka這塊肥肉于是基于rdkafka封裝的一個簡單舒适kafka拓展誕生了!

附上:

(see-kafka支援0.9~0.10版本,對0.8版本以及以前的版本協定不支援)

首先需要安裝配置好zookeeper+kafka:可以參考作者部落格下的kafka子產品下的介紹安裝,作者部落格介紹是對于0.8.2.2的安裝方式,但是和0.9和0.10的安裝并沒有差別,隻需要去下載下傳0.9和0.10的包即可

在使用之前需要按照順序先安裝librdkafka,在安裝php-rdkafka:

這個時候使用php -m 可以看到拓展清單記憶體在 rdkafka這項證明拓展已經安裝成功

see-kafka完美支援phalapi,隻需要把去拓展庫中擷取kafka拓展即可,當然不是phalapi的也可以使用隻需要include檔案下的kafka.php即可使用

kafka最基礎的兩個角色其中一個就是producer(可以參考作者部落格介紹)

向kafka中的一個topic寫入一條消息,需要寫入多條可以多次使用setmassage

對于consumer來說支援4種從offset的擷取方式分别為:

kafka_offset_stored #通過group來擷取消息的offset(必須設定group)

kafka_offset_end #擷取尾部的offset

kafka_offset_beginning #擷取頭部的offset

手動指定offset開始值

此例子适合擷取一段資料就結束的場景,每一次getmassage都會建立連接配接然後關閉連接配接,當循環使用getmassage會造成相對嚴重的效率問題

例子2适合腳本隊列任務

see-kafka提供兩種配置檔案的配置,分别傳入key和value,具體配置項已經作用參看如下位址:

<a href="https://github.com/edenhill/librdkafka/blob/master/configuration.md">https://github.com/edenhill/librdkafka/blob/master/configuration.md</a>

在使用consumer的group(kafka_offset_stored)中需要注意以下配置項,否則你在使用一個新的group會從目前開始計算offset(根據場景):

consumer擷取之後是需要送出告訴kafka擷取成功并且更新offset,但是如果中途報錯沒有送出offset則下次還是會從頭擷取,此項配置設定一個自動送出時間,當失敗後之前處理的也會吧offset送出到kafka:

在初始化kafka_lite會對叢集端口進行驗證,如果無任何一個可用的則會抛出一個no can use kafka異常,也可以主動觸發ping操作檢查叢集是否有有可用機器

當擷取consumer異常了會抛出一個kafka_exception_base異常,異常有一個code号可參考,exception/err.php檔案,推薦使用try-catch進行處理

see-kafka的宗旨是為了更加友善把kafka和php相結合,并且能夠友善的進行使用,如果大家感興趣可以使用看看,有問題可以進行回報,此拓展作者會長期維護下去!

官方交流群: 438882880