一、KafKa所涉及到的名词概念:

1.    Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上。

2.    Partition:是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition。

3.    Offset:消息在Partition中的编号,编号顺序不跨Partition。

4.    Consumer:用于从Broker中取出/消费Message。

5.    Producer:用于往Broker中发送/生产Message。

6.    Replication:Kafka支持以Partition为单位对Message进行冗余备份,每个Partition都可以配置至少1个Replication(当仅1个Replication时即仅该Partition本身)。

7.    Leader:每个Replication集合中的Partition都会选出一个唯一的Leader,所有的读写请求都由Leader处理。其他Replicas从Leader处把数据更新同步到本地,过程类似大家熟悉的MySQL中的Binlog同步。

8.    Broker:Kafka中使用Broker来接受Producer和Consumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Partition的Leader选举,协调Partition迁移等工作。

9.    ISR(In-Sync Replica):是Replicas的一个子集,表示目前Alive且与Leader能够“Catch-up”的Replicas集合。由于读写都是首先落到Leader上,所以一般来说通过同步机制从Leader上拉取数据的Replica都会和Leader有一些延迟(包括了延迟时间和延迟条数两个维度),任意一个超过阈值都会把该Replica踢出ISR。每个Partition都有它自己独立的ISR。

二、KafKa模型和Partition Leader选举说明

kafka消费者模型
1、分区消费模型: 每个分区对应每个消费实例
2、组消费模型
 
kafka两种消费模式服务器端源码对比:
1、分区消费模式有以下特点
 a、指定消费topic、partition和offset通过向服务器发送RPC请求进行消费
 b、需要自己提交offset
 c、需要自己处理各种错误,如:leader切换错误
 d、需要自己处理消费者负载均衡策略
 
2、组消费模式具有以下特点
 a、最终也是通过向服务器发送RPC请求完成的(和分区消费模式一样)
 b、组消费模式由kafka服务器端处理各种错误,然后将消息放入队列再分装为迭代器(队列为FetchedDataChunk对象),客户端只需要在迭代器上迭代取出消息
 c、 由kafka服务器端周期性的通过scheduler提交当前消费的offset,无需客户端负责
d、kafka服务端处理消费者负载均衡
(监控工具kafka offset monitor 和 kafka manager 均是基于组消费模式)
kakfa Partition选主机制
    kafka的leader election 方案解决了上述问题,它在所有broker中选出一个controller,所有的partition的leader选举都有controller决定,controller会将leader的改变直接通过RPC的方式(比zookeeper queue的方式更高效)通知需为此作为响应的Broker

 

三、相关命令用法

1、启动kafka
[root@t_cluster03_109_26 kafka]# bin/kafka-server-start.sh -daemon config/server.properties
  
2、手动创建topic
 
[root@t_cluster03_109_26 kafka]# bin/kafka-topics.sh --create --zookeeper 192.168.109.26:2181 --replication-factor 2 --partitions 1 --topic test
Created topic "test".
 
3、查看topic列表(列出集群当前所有可用的topic)
bin/kafka-topics.sh --list -zookeeper zookeeper_address
 
[root@t_cluster03_109_26 kafka]# bin/kafka-topics.sh --list --zookeeper 192.168.109.26:2181
test
 
 
4、手动启动consumer:
 
[root@t_cluster03_109_26 kafka]#  bin/kafka-console-consumer.sh --zookeeper 192.168.109.25:2181 --topic test1 --from-beginning
 
5、手动启动producer
 [root@t_cluster02_109_25 kafka]# bin/kafka-console-producer.sh --broker-list 192.168.109.25:9092 --topic test1
 
6、查看每个指定topic的分区和副本信息
[root@t_cluster03_109_26 kafka]# bin/kafka-topics.sh --describe --zookeeper 192.168.109.26:2181 --topic testtopic
Topic:testtopic    PartitionCount:2    ReplicationFactor:2    Configs:
    Topic: testtopic    Partition: 0    Leader: 3    Replicas: 3,1    Isr: 3,1
    Topic: testtopic    Partition: 1    Leader: 1    Replicas: 1,2    Isr: 1,2
 
7、增加partition的数量(4是增加后的数)
bin/kafka-topics.sh --zookeeper zookeeper_address  --alter --topic topic_name --partitions 4 
 [root@t_cluster01_109_24 kafka]# bin/kafka-topics.sh --describe --zookeeper 192.168.109.25:2181 --topic test
Topic:test    PartitionCount:1    ReplicationFactor:2    Configs:
    Topic: test    Partition: 0    Leader: 2    Replicas: 2,3    Isr: 2,3
[root@t_cluster01_109_24 kafka]# bin/kafka-topics.sh --alter --zookeeper 192.168.109.25:2181 --topic test --partitions 2
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!
[root@t_cluster01_109_24 kafka]# bin/kafka-topics.sh --describe --zookeeper 192.168.109.25:2181 --topic test
Topic:test    PartitionCount:2    ReplicationFactor:2    Configs:
    Topic: test    Partition: 0    Leader: 2    Replicas: 2,3    Isr: 2,3
    Topic: test    Partition: 1    Leader: 1    Replicas: 1,2    Isr: 1,2
[root@t_cluster01_109_24 kafka]# bin/kafka-topics.sh --alter --zookeeper 192.168.109.25:2181 --topic test --partitions 3
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!
[root@t_cluster01_109_24 kafka]# bin/kafka-topics.sh --describe --zookeeper 192.168.109.25:2181 --topic test
Topic:test    PartitionCount:3    ReplicationFactor:2    Configs:
    Topic: test    Partition: 0    Leader: 2    Replicas: 2,3    Isr: 2,3
    Topic: test    Partition: 1    Leader: 1    Replicas: 1,2    Isr: 1,2
    Topic: test    Partition: 2    Leader: 1    Replicas: 1,3    Isr: 1,3
 
8、集群leader平衡:
bin/kafka-preferred-replica-election.sh --zookeeper zookeeper_address auto.leader.rebalance.enable=true

注:附带KafKa集群配置文件,相关说明可以查看官方文档

[root@t_cluster01_109_24 config]# grep -v '^#' server.properties|grep -v '^$'
broker.id=1
port=9092
host.name=192.168.109.24
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/kafka/kafkalog
num.partitions=2
num.recovery.threads.per.data.dir=1
log.retention.hours=168
message.max.bytes=502400
default.replication.factor=2
replica.fetch.max.bytes=502400
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.109.24:2181,192.168.109.25:2181,192.168.109.26:2181
zookeeper.connection.timeout.ms=6000

Kafka随笔一的更多相关文章

  1. Kafka随笔

    1.选举Leader  Leader 是 Partition 级别的,当一个 Broker 挂掉后,所有 Leader 在该 Broker 上的 Partition 都会被重新选举,选出一个新 Lea ...

  2. 【原创】Kafka console consumer源代码分析(一)

    上一篇中分析了Scala版的console producer代码,这篇文章为读者带来一篇console consumer工作原理分析的随笔.其实不论是哪个consumer,大部分的工作原理都是类似的. ...

  3. jmeter随笔(29)-关于自己的jar包和beanshell的使用

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  4. 大数据入门第十八天——kafka整合flume、storm

    一.实时业务指标分析 1.业务 业务: 订单系统---->MQ---->Kakfa--->Storm 数据:订单编号.订单时间.支付编号.支付时间.商品编号.商家名称.商品价格.优惠 ...

  5. KClient——kafka消息中间件源码解读

    目录 kclient消息中间件 kclient-processor top.ninwoo.kclient.app.KClientApplication top.ninwoo.kclient.app.K ...

  6. Kafka+SpringMVC+Maven应用示例

    本文借助主流SpringMVC框架向大家介绍如何在具体应用中简单快捷的使用kafka.kafka.maven以及SpringMVC在现在的企业级应用中都占据着非常重要的地位,所以本文将三者结合起来也可 ...

  7. kafka+windows+java+springboot中的配置

    1.百度kafka+zookeeper+windows配置 1.1  zookeeper配置 dataDir=/tmp/zookeeper # the port at which the client ...

  8. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

  9. Kafka Connect简介

    Kafka Connect简介 http://colobu.com/2016/02/24/kafka-connect/#more Kafka 0.9+增加了一个新的特性Kafka Connect,可以 ...

随机推荐

  1. iOS APP性能优化

    :应用启动时间 应用启动时,只加载启动相关的资源和必须在启动时加载的资源. :本地图片加载方式 本地图片加载常用方法有两种: a. [UIImage imageNamed:@"xx.png& ...

  2. Hadoop 学习资料集锦

    Hadoop 资料 虾皮系列教程. Sqoop 资料 官方安装文档. 浪迹天涯博客. 瀚海星空博客. ……

  3. 在CentOS 7中安装与配置JDK8

    参考命令:http://www.jb51.net/os/RedHat/73016.html来进行安装 安装说明 系统环境:centos7 安装方式:rpm安装 软件:jdk-8u25-linux-x6 ...

  4. 【转】《从入门到精通云服务器》第七讲—IAAS、PAAS、SAAS

    Saas.Paas.IaaS这三个词,一直困扰众人很久.就拿字面意思来说,分别是:软件即服务,平台即服务,设施即服务.小编表示这个不往深了讲,真心看不懂,还容易弄混淆.今天我们就来扒一扒这三者的深层含 ...

  5. 从零开始山寨Caffe·伍:Protocol Buffer简易指南

    你为Class外访问private对象而苦恼嘛?你为设计序列化格式而头疼嘛? ——欢迎体验Google Protocol Buffer 面向对象之封装性 历史遗留问题 面向对象中最矛盾的一个特性,就是 ...

  6. seajs学习一天后的总结归纳

    公司项目最近需要将js文件迁移到seajs来进行模块化管理,由于我以前主要接触模块化开发是接触的AMD规范的requireJS,没有接触过CMD规范,而且在实际项目中还没有用过类似技术.于是,我非常兴 ...

  7. Linux下uniq命令的详解

           -c 在输出行前面加上每行在输入文件中出现的次数.  -d 仅显示重复行.       -u 仅显示不重复的行. 示例 1.去重,有多行一样的只显示一行cat 4.txt |sort - ...

  8. 常用的js正则表达式

    正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑.熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升. 下面是一些,在前端开 ...

  9. HTTP协议入门要点

    应用层协议.基于tcp HTTP/0.9 命令 GET 特点 服务器只能回应HTML字符串 服务器发送完毕后就关闭tcp连接 HTTP/1.0 命令 GET POST HEAD 特点 每次通信都必须包 ...

  10. C# winform安装部署(转载)

    c# winform 程序打包部署 核心总结: 1.建议在完成的要打包的项目外,另建解决方案建立安装部署项目(而不是在同一个解决方案内新建),在解决方案上右击-〉添加-〉现有项目-〉选择你要打包的项目 ...