1、Kafka是由Linkedin公司开发的,使用Scala语言编写的,分布式,多副本,多分区的,发布订阅模式的消息系统,他通常用于日志系统的搭建,
2、Kafka和Zookeeper:Kafka通过Zookeeper管理集群配置,选举Controller,同时在老版本的Consumer-API中,当Consumer发生变化时,通过Zookeeper实现Consumer-Group的Reblance。
3、Kafka的基本概念:
producer:
  消息生产者,发布消息到 kafka 集群的终端或服务。
broker:
  kafka 集群中包含的服务器。
topic:
  每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。
partition:
  partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。
consumer:
  从 kafka 集群中消费消息的终端或服务。
Consumer group:
  high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。
replica:
  partition 的副本,保障 partition 的高可用。
leader:
  replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
follower:
  replica 中的一个角色,从 leader 中复制数据。
controller:
  kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。
zookeeper:
  kafka 通过 zookeeper 来存储集群的 meta 信息。
4、每一个Topic,Kafka会将它分成若干个partition,每个partition通过负载算法存储有序的消息,每个消息的序号叫做消息的Offset。
  每个Topic的所有partition都是已文件的形式存储在硬盘上的。
5、Kafka的高可用性来源于他的副本机制,可以在创建Topic的时候指定该Topic被划分为几个分区,拥有几个副本。
6、Producer发布消息:Producer采用Push的模式将消息发布到Broker上,每条消息都被Append到对应Topic的Partition中,属于顺序谢磁盘。
7、通过初始化producer中request.required.acks值来实现不同的ack策略。
  0:生产者producer不等待来自broker同步完成的确认就继续发送下一条(批)消息。
  1:producer在leader已成功收到的数据,写本地日志文件成功,返回客户端。
  -1:producer在follower副本确认接收到数据后才算一次发送完成。
8、Kafka数据日志的删除策略:
  无论消息是否被消费,kafka 都会保留所有消息。有两种策略可以删除旧数据:
  1. 基于时间:log.retention.hours=168
  2. 基于大小:log.retention.bytes=1073741824
9、Kafka-Consumer:
  Kafka通过Poll的方式从Broker中读取数据进行消费。
  通过设置不同的消费者组,实现Topic消息的多次消费。
  Kafka可以指定从Topic的那个位置来消费。
  老版本的API将Consumer-Offset信息存在Zookeeper中,新版本的API将Consumer-Offset信息存在Kafka名为_consumer_offsets的topic中。
10、可以设置Consumer的auto.commit.enable参数实现Offset是否自动提交。
11、常用Zookeeeper和Kafka的命令
  Zookeeper命令
  查看服务器状态 ./zkServer.sh status
  连接zk客户端: zkCli.sh
  ls/ll 查看当前目录下的信息
  get 获取路径详细信息
  Kafka命令
  启动kafka bin/kafka-server-start.sh server.properties
  停止Kafka bin/kafka-server-stop.sh server.properties
  创建Topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  查看Topic bin/kafka-topics.sh --list --zookeeper 192.169.1.147:2181,192.169.1.147:2182,192.169.1.147:2183
  发送消息 bin/kafka-console-producer.sh --broker-list 192.169.1.147:9093, 192.169.1.147:9094, 192.169.1.147:9095 --topic test
  消费消息 bin/kafka-console-consumer.sh --bootstrap-server 192.169.1.147:9093, 192.169.1.147:9094, 192.169.1.147:9095 --topic test --from-beginning

Kafka技术原理知识点总结的更多相关文章

  1. Kafka技术原理

    详情请参见:http://zqhxuyuan.github.io/2016/05/26/2016-05-13-Kafka-Book-Sample

  2. 大数据相关技术原理资料整理(hdfs, spark, hbase, kafka, zookeeper, redis, hive, flink, k8s, OpenTSDB, InfluxDB, yarn)

    hdfs: hdfs官方文档 深入理解HDFS的架构和原理 https://blog.csdn.net/kezhong_wxl/article/details/76573901 HDFS原理解析(总体 ...

  3. Kafka 技术文档

    Kafka 技术文档   目录 1 Kafka创建背景 2 Kafka简介 3 Kafka好处 3.1 解耦 3.2 冗余 3.3 扩展性 3.4 灵活性 & 峰值处理能力 3.5 可恢复性 ...

  4. apache kafka技术分享系列(目录索引)--转载

    原文地址:http://blog.csdn.net/lizhitao/article/details/39499283 kafka开发与管理: 1)apache kafka消息服务 2)kafak安装 ...

  5. Android热修复技术原理详解(最新最全版本)

    本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结   通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...

  6. 初学Kafka工作原理流程介绍

    Apache kafka 工作原理介绍 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需 ...

  7. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  8. kafka系列四、kafka架构原理、高可靠性存储分析及配置优化

    一.概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cl ...

  9. kafka技术分享02--------kafka入门

    kafka技术分享02--------kafka入门 1. 消息系统 ​ 所谓的Messaging System就是一组规范,企业利用这组规范在不同的系统之间传递语义准确对的消息,实现松耦合的异步数据 ...

随机推荐

  1. 适合C++のOIer平日写题的开场模板

    上面的#define还是较充足的,快读模板也有,freopen也提前打好了,比较适合OIer(C++)平时刷题和考试的开场. (纯原版仅供SJZEZのORZ队&AFO队使用) (您老把开头的注 ...

  2. 【LeetCode】17-电话号码的字母组合

    题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出: ...

  3. 搭建Nuget服务器(Nuget私服)

    一.前言 对公司或者对个人来说,经过一段时间的沉淀之后,都会有一些框架或者模块,为了对这些框架或者模块进行更好的管理和维护,也为了方便后面的开发或者其他同事,我们可以在我们本地或者内网搭建一个Nuge ...

  4. Python获取列表中的最后一个或者倒数第几个的方案

    print(members[3]) 灵魂所在“ - (负号 )” 我们先来创建一个列表,和php中的数组一样. members = ['张三','李四','王五','芳芳','小明','小王'] 按照 ...

  5. Metaspolit工具----基础

    Metasploit框架(Metasploit Framework,MSF)是一个开源工具,旨在方便渗透测试,他是有Ruby程序语言编写的模板化框架,具有很好的扩展性,便于渗透测试人员开发.使用定制的 ...

  6. 即时聊天APP(一)

    最新写了一个即时聊天的安卓Demo,是基于Bmob后端开发的app,由于Bmob有较大局限性,因此,我并没有按照开发文档来进行开发,只是简单写了一个基本的文字聊天,以后有时间我会自己写一个带服务端的即 ...

  7. MySQL索引&&开发规范

    规范总结 索引规范 默认添加的索引都是BTree索引.Innodb只支持BTree索引. 设计索引原则 - 最适合索引的列是WHERE子句中的列,而不是SELECT中的列. - 如果索引的字段很长,使 ...

  8. 控制执行流程之break和continue

    1.在任何迭代语句的主体部分,都可以用break和continue来控制程序执行流程. 2.注意: break:用于强行退出循环, 不执行循环中剩余的语句:continue:停止当前的循环,执行下一次 ...

  9. Day 11 文件的权限

    1.什么是权限? 我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权力.* 2. ...

  10. [Advanced Python] 15 - "Metaclass": ORM

    From: 使用元类 动态创建类 与静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 一 .type()动态创建 我们说class的定义是运行时动态创建的: 而创建cl ...