MQ在分布式场景下的应用已经非常广泛了。可是在全部的MQ使用场景中,大多都要求不能丢消息。意味着必须有持久化的能力,传统行业经常使用的activemq、rabbitmq尽管有持久化能力,无奈的是性能太低。扩展性太差。对于互联网公司来说,要么就去基于他们去扩展,要么就是自己研发一个新的MQ。自从kafka横空出世。唤醒了人们对高性能   MQ的追求。

实际上kafka0.8版本号已经脱胎换骨,再也不仅仅是适合日志收集的场景了,kafka在可靠性方面做了非常多改进。实际上kafka已经能够用在企业级应用里面了。

怎样达到高性能?

1、  顺序写

磁盘的IO是全部应用性能的万恶之源。磁盘的顺序写能达到几百M每秒,而随机写仅仅有几十K,假设是一个千兆网卡,真实性能也就百M左右,可见,磁盘顺序写的威力巨大。

2、  零拷贝

某些情况下,数据的传输是不须要经过应用程序的,能够降低数据在用户空间和系统空间的缓冲区进行copy,降低对cpu和网卡的消耗,这样能够获得非常好的性能。Linux下提供此功能的系统调用主要有sendfile、mmap、splice。

3、  扩展性

假设要想突破单机的性能,必须拥有良好的扩展性,kafka能够在topic下建立partition,partition才是kafka的最小单位。这样就意味着同一个topic能够持久化到N台物理机上,仅仅要有足够的分区。

Kafka天生的分布式特性,差点儿能够无限的扩展。

实际上,kafka的吞吐量能够达到几万TPS,性能很高。而且扩展性如此高。在大并发、大数据量的场景下很适合。

怎么保证不丢消息?

丢消息主要有下面几个地方:

1、生产者发送消息。Kafka是採用ack机制保障的,假设消息没法送成功。也不会返回ack,所以。只要在生产者端做好重试机制就好。

怎样做好重试机制。又是一个很大的话题,此处不扩展开来。

Kafka服务端收到消息后能够直接拷贝到其它分片。成功后再通知生产者确定收到消息。就算不做同步的持久化,假设有三个节点,除非三个物理机同一时候宕机才会丢失数据。注意,这里假设不过kafka进程挂掉是不会丢数据的,操作系统会把数据持久化到磁盘。

2、Kafka存储的消息会不会丢失?kafka有定时删除策略,不以是否消费为前提,也就意味着没有经过消费的消息删除后就丢了,由于磁盘足够大。几天不删应该不是问题,假设几天的数据没有被消费你都没发现,那仅仅能怪你的监控系统太弱。或者你的应用量太小。出问题都没人发现,那也没有必要使用kafka。

3、消费消息。假设使用high level的api,全部消费者的信息都是存储在zookeeper中的,zookeeper的可靠性此处不必赘述。假设採用simple api。offset的可靠性要依赖于存储。务必小心。最好做充足的备份方案。

不管哪种方式,假设不能正常消费,你能够不去移动offset,这个地方全然能够自己控制。

有反复的消息怎么办?

尽管这样造成了反复消息的问题,可是这是非常难避免的,试想。像activeMQ那样,就算在服务端做了去重,消费时一样有可能会反复消费,不仅仅是在MQ中,就算你调用一个普通的服务接口,也有可能反复调用,最好的办法是通过业务尽量实现幂等性。比如添加唯一键。

从这些角度考虑。在互联网和大并发的企业级应用中,kafka会越来越重要,会被很多其它的人重视。就算是不用kafka,也会有跟kafka类似的架构模式、原理几乎相同的MQ,类似于rocketMQ。如今差的,就是被很多其它的企业使用。更复杂的场景证明。

为什么是kafka?的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  3. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  4. .net windows Kafka 安装与使用入门(入门笔记)

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  5. kafka配置与使用实例

    kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列

  6. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

  7. Kafka副本管理—— 为何去掉replica.lag.max.messages参数

    今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...

  8. Kafka:主要参数详解(转)

    原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...

  9. kafka

    2016-11-13  20:48:43 简单说明什么是kafka? Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息 ...

  10. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

随机推荐

  1. [转]Oracle Client 11g安裝經驗

    本文转自:http://www.dotblogs.com.tw/shadow/archive/2011/11/08/54759.aspx 開發環境:本機(Win XP)的ASP.net 4 WebSi ...

  2. HTML TabIndex属性

    TabIndex作用: tabindex:全局属性.指示其元素是否可以聚焦(获得焦点),以及它是否/在何处参与顺序键盘导航(因通常使用tab键操作,顾因此得名). 当使用tab键在网页控件中进行导航时 ...

  3. Android 解决ScrollView嵌套RecyclerView导致滑动不流畅的问题

    最近做的项目中遇到了ScrollView嵌套RecyclerView,刚写完功能测试,直接卡出翔了,后来通过网上查找资料和 自己的实践,找出了两种方法解决这个问题. 首先来个最简单的方法: recyc ...

  4. 3星|《管理十诫》:十年前可口可乐退休CEO的一生管理经验总结

    管理十诫:影响你一生的管理哲学 英文书应该是2008年出版的.国内出版过几个译本. 作者是可口可乐CEO.本书是他从可口可乐CEO退下来后写的管理经验总结.作者总结了11条CEO不应该做的事.这11条 ...

  5. Lvs Keepalive DR模式高可用配置

    Lvs Keepalive DR模式配置 一.环境 #DIP# eth0:192.168.233.145#VIP# eth0:0 192.168.233.250/32 #RIP1:192.168.23 ...

  6. 扩增子图表解读8网络图:节点OTU或类Venn比较

    网络图 Network 网络图虽然给人高大上的感觉,但是由于信息太多,无法给读者提供读有效的可读信息或是读者不知道该理解什么,总是让人望尔却步.那是因为大家太不了解网络,自己读不懂网络想表达的意思及其 ...

  7. 使用GetMirror一次镜像多个实体

    public static void GetMirror(this ObjectIdCollection ids, Point3d p1, Point3d p2, bool s, params Ent ...

  8. JpGraph 画图

    1:借鉴地址 PHP jpgraph安装及基本用法 http://www.php.cn/php-weizijiaocheng-400977.html JpGraph使用详解之中文乱码解决方法 http ...

  9. 手把手从python安装到setuptools、pip工具安装

    一.python安装1.基础开发库 apt-get install gccapt-get install openssl libssl-dev 2.安装数据库和开发库 apt-get install ...

  10. Oracle 数据库连接的一些坑

    问题: ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAMEORA-12514: TNS: 监听程序当前无法识别连接描述符中请求服务 解决办法: 1 权限 安 ...