redis是一個基於內存的kv數據庫,而kafka是分布式發布訂閱消息系統.兩者本身不是同樣一個層次的東西。
redis中有一個queue的數據類型,用來做發布/訂閱系統,這個就可以和kafka進行比較了哈。
存儲介質不同
redis queue數據是存儲在內存,雖然有AOF和RDB的持久化方式,但是還是以內存為主。
kafka是存儲在硬盤上
性能不同
因為存儲介質不同,理論上redis queue的性能要優於kafka,但是在實際使用過程,這塊體驗並不是很明顯,通常只有一些高並發場景下需要用redis queue,比如發紅包,可以先將紅包預先拆解然后push到redis queue,在搶的一瞬間可以很好的支撐並發。
成本不同
這邊要划重點,划重點,划重點。
kafka存儲在硬盤上,成本會比內存小很多,具體差1,2個數量級是有,在數據量非常大的情況下,使用kafka能夠節省蠻多服務器成本。最常見的有應用產生的日志,這些日志產生的量級一般都很大,如果有需要進行處理,可以使用kafka隊列。
消息可靠
redis存儲在內存中,一旦服務異常或者宕機,數據就會丟失。相對來說kafka存儲在硬盤更加安全。
訂閱機制
這邊也是比較重點,訂閱機制主要有兩點不同:
kafka消費了之后,可以重新消費。redis消費(lpop)了數據之后,數據就從隊列里消失了。kafka里面是偏移量(offset)的概念,可以設置到前面重新消費。
redis只支持單一的消費者,只有topic模式。kafka不光有topic,還支持group分組模式,可以有多個消費組,消費同一個topic的消息。比如應用產生的行為日志,走kafka就很合適,大數據部門可以消費做數據分析,開發部門可以消費做后續的業務邏輯。
總結
總結來看,主要就是兩點:
存儲介質不一樣,因為存儲介質的不同,造成性能、成本、可靠性的差異。
訂閱機制不一樣。
RabbitMQ和kafka的區別
1.應用場景方面
RabbitMQ:用於實時的,對可靠性要求較高的消息傳遞上。
kafka:用於處於活躍的流式數據,大數據量的數據處理上。
參考文檔:
https://blog.csdn.net/chenjiebin/article/details/106210013