热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

前言

大数据技术相辅相成,没有任何一种技术是没有缺点,孤立发展的。昨天咱们整理了大数据计算引擎Spark和Flink的区别联系,大家反响还不错,今天咱们再来分析下Kafka和Redis的对比,看分布式发布订阅都有什么各自的优势与缺点。

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

Redis是什么

Redis 是开源免费的,遵守BSD协议,是一个高性能的key-value非关系型数据库。可能有朋友会问,Redis作为存储数据库,怎么和分布式发布订阅消息系统Kafka对比?两者本身不是同一个层次的东西啊。

但是Redis中有一个queue的数据类型,用来做发布/订阅系统,这个就可以和kafka进行比较了。

kafka是什么

Kafka 是一个高吞吐、分布式、基于发布订阅的消息系统,利用Kafka技术可在廉价PC Server上搭建起大规模消息系统。Kafka具有消息持久化、高吞吐、分布式、多客户端支持、实时等特性

现在干货来了,kafka和Redis的区别联系

存储介质不同

redis queue数据是存储在内存,虽然有AOF和RDB的持久化方式,但是还是以内存为主。

kafka是存储在硬盘上

性能不同

因为存储介质不同,理论上redis queue的性能要优于kafka,但是在实际使用过程,这块体验并不是很明显,通常只有一些高并发场景下需要用redis queue,比如发红包,可以先将红包预先拆解然后push到redis queue,在抢的一瞬间可以很好的支撑并发。

成本不同

这边要划重点,划重点,划重点。

kafka存储在硬盘上,成本会比内存小很多,具体差1,2个数量级是有,在数据量非常大的情况下,使用kafka能够节省蛮多服务器成本。最常见的有应用产生的日志,这些日志产生的量级一般都很大,如果有需要进行处理,可以使用kafka队列。

这只是简单的介绍原始差距,咱们再来看核心对比——作为消息队列的优劣对比

Redis作为消息队列

redis发布(pub)、订阅(sub)模式

redis中的发布订阅由三部分组成。发布者(生产者)、通道(类似于topic)、订阅者(消费者),具体结构如下图:

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

Redis的pub-sub模式非常像西式快餐一样,快餐快消,全都是因为Redis是使用内存来做存取,所有你生产的消息立马会被消费者一次性全部处理掉,并且没有留下任何痕迹, 同时因为内存总是宝贵的,所以内存上会有限制,当生产者以及消费者上来的时候也会对redis的效率,还有Redis在处理发布和消费big size(10K+的文件)的数据的时候会表现出无法忍受的缓慢

如果有以下场景可以考虑使用Redis作为消息队列

 如果你的需求是快产快消的即时消费场景,并且生产的消息立即被消费者消费掉

 如果速度是你十分看重的,比如慢了一秒好几千万这种

 如果允许出现消息丢失的场景

 如果你不需要系统保存你发送过的消息,做到来无影去无踪

 如果需要处理的数据量并不是那么巨大

KafKa作为消息队列

  KafKa的设计精妙,支持分布式,高可用的部署,并且对一个大的队列采用分成多个Partition(分区),来提高消息入队的吞吐量,分而治之的思想. 并且消费的时候支持group的概念,能够支持多个客户端消费同个队列,并且一个group中可以增加consumer的数量来扩展消费的处理量.

  KafKa不受生产者数量的影响,因为吞吐量足够支撑,即使在廉价的单机服务器上也可以有10万每秒的消息传输量,并且消费者是想什么时候消费都可以,消息它就在那里,十分灵活,不用担心来无影去无踪的恐慌.能把消息持久化,并以一定的策略(例如一定时间内删除,或者到达多大容量的时候清空)

当有一下场景的时候你可以考虑使用KafKa作为消息队列

 如果你想要稳定的消息队列

 如果你想要你发送过的消息可以保留一定的时间,并不是无迹可寻的时候

 如果你无法忍受数据的丢失

 如果速度不需要那么的快

 如果需要处理数据量巨大的时候

后结

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

Redis 是以 key 的 hash 方式来分散对列存储数据的,且 Redis 作为集群使用时,对应的应用对应一个 Redis,在某种程度上会造成数据的倾斜性,从而导致数据的丢失。

而从之前部署 Kafka 集群来看,kafka 的一个 topic(主题),可以有多个 partition(副本),而且是均匀的分布在 Kafka 集群上,这就不会出现 redis 那样的数据倾斜性。Kafka 同时也具备 Redis 的冗余机制,像 Redis 集群如果有一台机器宕掉是很有可能造成数据丢失,而 Kafka 因为是均匀的分布在集群主机上,即使宕掉一台机器,是不会影响使用。同时 Kafka 作为一个订阅消息系统,还具备每秒百万级别的高吞吐量,持久性的、分布式的特点等。

如果感觉没看过瘾,想自己实战操作一把,没关系,小编这边把kafka和Redis学习资料已经帮大家整理好了,有需要的小伙伴可以转发+关注小编,并私信小编来免费领取吧~~~

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路

你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路


推荐阅读
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 本文详细探讨了在Java TCP编程中,如何理解和测量并发连接数、请求数及并发用户数,并提供了实际应用中的测试方法和优化建议。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 协程作为一种并发设计模式,能有效简化Android平台上的异步代码处理。自Kotlin 1.3版本引入协程以来,这一特性基于其他语言的成熟理念,为开发者提供了新的工具,以增强应用的响应性和效率。 ... [详细]
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
  • 本文探讨了SSD购买后是否需要进行4K对齐的问题,并详细解释了4K对齐的原理及其重要性。通过对比机械硬盘与固态硬盘的结构,文章深入分析了4K对齐对SSD性能的影响,并提供了具体的对齐方法。 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
author-avatar
幸福不要躲008_784
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有