原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
 

近来无事研究了一下kafka,并且用golang连接kafka做了producer和consumer的简单测试,对kafka有了一些基本的认识。

 
kafka不同于activemq和rabbitmq等这种符合AMQP协议的标准消息队列产品,它有一些list或者array的特征,可以指定从offset读取。阿里巴巴的rocketmq在原型产品中借鉴了kafka的设计思想,现已在阿里大规模使用,详情参考:https://github.com/alibaba/RocketMQ
 
kafka提倡使用拉模式,并且可以对消息重复消费,看起来不符合传统queue的思想,但却提供了额外的好处,比如:某模块更新到产线发现有bug,需要将上线以来的消息全部重新消费,即消息回溯。
 
kafka是高并发型的消息队列,但这是有前提条件的。条件是topic要定义多个partition,将压力分担到各个partition上。topic是逻辑概念,partition是物理存在各个broker,以此达到负载均衡的目的。要注意的是,各个partition可以独立消费,各partition间的消息是无法保证顺序性的,顺序只存在同一partition。以我的经验看,无论哪种MQ,要严格保证顺序,都要付出昂贵的代价,因此弱化顺序是有必要的。
 
kafka的另一个特性是高可用。放眼目前业界数据层的高可用解决方案,采用的无非都是两种:冗余数据和共享存储。后者以价格昂贵著称,比如SAN,给土豪公司玩的。在党中央构建节约性社会的号召下,我建议使用前者。冗余数据最常见的便是日志复制,kafka的道理也一样。由一组节点组成leader,follower组成小的cluster,由zookeeper做协调(Paxos算法)。leader,follower的比例和数量可配置,一般为1:2。在写入的时候, follower会不断复制leader的数据,leader挂掉后会从follwer中选举新的leader。
 
kafka使用了零拷贝技术来优化性能,直接发送磁盘的数据到socket。此为其极为取巧的设计和亮点。

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. Windows Server 2003 服务器备份和恢复技巧

    1.系统备份与恢复      现在很多中小型企业服务器并没有采用专业的服务器备份机制进行备份,对于个人站长而言这似乎更不可能.但是再好的服务器维护人员总有失误的时候,为了防止万一我们最好还是采用一些备 ...

  2. DataGridView in TabControl and CellValidating lead to problems

    I created a little form with a TabControl on it and a combobox. On the  first page i added a DataGri ...

  3. C# 反转字符串

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 实现字符 ...

  4. PHP入门教程-开发环境搭建

    1.PHP简介: PHP是能让你生成动态网页的工具之一.PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP. 2.学习需要基础: a.HTML b.Ja ...

  5. css大小单位px em rem的转换和详解

    css大小单位px em rem的转换和详解 PX特点1. IE无法调整那些使用px作为单位的字体大小:2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位:3. Firefox能 ...

  6. javascript中onload事件如何绑定及执行顺序

    onload事件,顾名思义就是为了js程序能够在网页加载成功过后进行执行.对于放在head里面的js来说,非常必要. 如何给网页绑定onload,主要有三种方式: window.onload=func ...

  7. 图片浏览(CATransition)转场动画

    Main.storyboard ViewController.m // //  ViewController.m //  8A04.图片浏览(转场动画) // //  Created by huan ...

  8. Python基于pandas的数据处理(二)

    14 抽样 df.sample(10, replace = True) df.sample(3) df.sample(frac = 0.5) # 按比例抽样 df.sample(frac = 10, ...

  9. VBoxManage: error: Cannot register the hard disk 解决办法

    将虚拟盘从一个分区拷到另外一个分区上,打开虚拟机挂载这个虚拟盘老是报错,VBoxManage: error: Cannot register the hard disk '/media/New Vol ...

  10. (最小路径覆盖) News 消息传递 (hust OJ 2604)

    http://begin.lydsy.com/JudgeOnline/problem.php?id=2604   Description 总部最近打算向下面的N个工作人员发出了一条秘密消息.因为它是机 ...