1、kafka是什么

  类JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据。 kafka是一个生产-消费模型。
  producer:生产者,只负责数据生产,生产者的代码可以集成到任何系统中。数据的分发策略由producer决定,默认是Defaultpartition Utils.abs(key.hashCode)%numPartitions.
  Broker;当前服务器上的kafka进程,俗称拉皮条。只管数据存储,不管是谁消费。在集群中每个broker都有一个唯一的brokerid,不得重复。
  Topic:目标发送的目的地,这是一个逻辑上的概念,落到磁盘上是一个Partition的目录。partition的目录中有多个segment组合(index,log)
      一个Topic对应多个partition[0,1,2,3],一个Partition对应多个segment组合。一个segment有默认的大小是1G。
      每个Partition可以设置多个副本,会从所有的副本中选取一个leader出来。所有读写操作都是通过leader来进行的。特别强调,和mysql中主从有区别,mysql做主从是为了读写分离,在kafka中读写操作都是leader。
  Consumer:数据消费者,Consumer可以有多个,每个consumer消费的数据都是一样的。
  ConsumerGroup;可以把多个consumer线程划分为一个组,组里面所有成员共同消费一个topic的数据,组员之间不能重复消息。

2、kafka生产数据时的分组策略

  默认是Defaultpartition Utils.abs(key.hashCode)%numPartitions.
  上文中的key是producer在发送数据时传入的,producer.send(KeyMessage(topic,mypartitionKey,messageContent))

3、Kafka如何保证数据的完全生产?

  ack机制:broker表示发来的数据已确认接收无误,表示数据已经保存到磁盘。
      0 :不等待broker返回确认信息。
      1 :等待topic中某个partition leader保存成功的状态反馈。
      -1:等待topic中某个partiton 所有副本都保存成功的状态反馈

4、broker如何保存数据?

  在理论环境下,broker按照顺序读写的机制,可以每秒保存600M的数据。主要通过pagecache机制,尽可能的利用当前物理机器上的空闲内存来做缓存。当前topic所属的broker,必定有一个该topic的partition,partition是一个磁盘目录。partition的目录中有多个segment组合(index,log)

5、partition如何分布在不同的broker上。

list(kafka01,kafka02,kafka03)//broker列表
int partitions=4;//partitions个数
for(int i=0;i<partitions;i++){
brIndex=i%broker;
hostname=list.get(brIndex)
}

6、consumerGroup的组员和partition之间如何做负载均衡?

  最好是一一对应,一个partition对应一个consumer。如果consumer的数量过多,必然有空闲的consumer

  算法:
  假如topic1,具有如下partitions: P0,P1,P2,P3
  加入group中,有如下consumer: C1,C2
  首先根据partition索引号对partitions排序: P0,P1,P2,P3
  根据consumer.id排序: C0,C1
  计算倍数: M = [P0,P1,P2,P3].size / [C0,C1].size,本例值M=2(向上取整)
  然后依次分配partitions: C0 = [P0,P1],C1=[P2,P3],即Ci = [P(i * M),P((i + 1) * M -1)]

7、如何保证kafka消费者消费数据是全局有序的?

  伪命题
  如果要保证消费有序,必须保证生产有序,存储有序,消费有序。
  由于生产可以做集群,存储可以分片,消费可以设置为一个consumerGroup,就需要全局全局有序,就需要保证每个环节都有序。
  只有一个可能,就是一个生产者,一个partition,一个消费者。这种场景和大数据应用相悖。

Kafka系列二 kafka相关问题理解的更多相关文章

  1. Kafka 系列(五)—— 深入理解 Kafka 副本机制

    一.Kafka集群 Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息.每个 broker 都有一个唯一标识 broker.id,用于标识自己在集群中的身份,可以在配置文 ...

  2. Kafka系列之-Kafka Protocol实例分析

    本文基于A Guide To The Kafka Protocol文档,以及Spark Streaming中实现的org.apache.spark.streaming.kafka.KafkaClust ...

  3. Kafka系列之-Kafka监控工具KafkaOffsetMonitor配置及使用

    KafkaOffsetMonitor是一个可以用于监控Kafka的Topic及Consumer消费状况的工具,其配置和使用特别的方便.源项目Github地址为:https://github.com/q ...

  4. Kafka系列之-Kafka入门

    接下来的这些博客,主要内容来自<Learning Apache Kafka Second Edition>这本书,书不厚,200多页.接下来摘录出本书中的重要知识点,偶尔参考一些网络资料, ...

  5. kafka系列二:多节点分布式集群搭建

    上一篇分享了单节点伪分布式集群搭建方法,本篇来分享一下多节点分布式集群搭建方法.多节点分布式集群结构如下图所示: 为了方便查阅,本篇将和上一篇一样从零开始一步一步进行集群搭建. 一.安装Jdk 具体安 ...

  6. Kafka系列(二)特性和常用命令

    Kafka中Replicas复制备份机制 kafka将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有),备份的个数可以 ...

  7. kafka系列二、kafka manager的安装和使用

    1. Yahoo kafka manager介绍 项目地址:https://github.com/yahoo/kafka-manager Requirements: Kafka 0.8.1.1 or ...

  8. Kafka系列二之部署与使用

    Kafka部署与使用 写在前面 从上一篇Kafka的架构介绍和安装中,可能,你还一直很蒙,kafka到底该怎么使用呢?接下来,我们就来介绍Kafka的部署与使用.上篇文章中我们说到,Kafka的几个重 ...

  9. Apache Kafka系列(二) 命令行工具(CLI)

    Apache Kafka命令行工具(Command Line Interface,CLI),下文简称CLI. 1. 启动Kafka 启动Kafka需要两步: 1.1. 启动ZooKeeper [roo ...

随机推荐

  1. python_循环(迭代)

    #for 和 while #for用来迭代处理,什么叫迭代?你就当没看到这个词,for是把一堆玩意做一个一个加工用的,比如吃一袋花生,得一个一个剥吧,就是这意思 a = 'abcde' #每个字母当做 ...

  2. mac 程序 Access-JSON-Data

    mac 程序 Access-JSON-Data 说明 直接将JSON数据生成文件,便于调试. 效果图 源码 https://github.com/YouXianMing/Create-JSON-Mod ...

  3. 解析苹果的官方例子LazyTableImages实现图片懒加载原理

    解析苹果的官方例子LazyTableImages实现图片懒加载原理 首先在官网下载源码: https://developer.apple.com/library/ios/navigation/#sec ...

  4. 静态代码分析工具sonarqube+sonar-runner的安装配置及使用

    配置成功后的代码分析页面: 可以看到对复杂度.语法使用.重复度等等都做了分析,具体到了每一个方法和每一句代码. 四种使用方式: sonarqube + sonar-runner sonarqube + ...

  5. 2018年阿里巴巴关于java重要开源项目汇总

    1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务的 ...

  6. wxpython 窗口排版- proportion/flag/border参数说明

    新学习wxpython,一直纠结于窗口控件的排版,经过几天的查资料.试验,总结如下. 1.需求实例 来个实例,窗口有3行控件 第一行是文本提示(大小不变,文字左对齐,控件居左). 第二行依次为文本提示 ...

  7. [转]Centos7下面配置静态IP

    修改网卡配置文件(操作前先备份一下该文件),/etc/sysconfig/network-scripts/ifcfg-enp0s3 ,如下: TYPE=Ethernet BOOTPROTO=stati ...

  8. Nginx-基础配置

    正文 本文转载自:http://www.ha97.com/5194.html 文章经过我排版和润色再加工,更加易读.实在是了解nignx配置的基础好文章. 正文 定义Nginx运行的用户和用户组 us ...

  9. September 19th 2017 Week 38th Tuesday

    Live boldly. Push yourself. Don't settle. 勇敢生活,突破自我,永不设限! Don't indulge in the past, whether it was ...

  10. 第二次作业--APP案例分析

    网易云音乐APP分析 第一部分 调研, 评测 1.APP打开界面简洁,一进入APP便能看到APP推荐的歌单,再使用的时候可以更多的了解新的歌曲 2.APP顶部分为三个板块为音乐管理.音乐推荐(音乐推荐 ...