(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