kafka学习篇

安装与配置

  • linux系统,通过虚拟机安装centos或者win10 系统自己挂载的ubuntu系统都可以。
  • 首先需要安装java环境,同时配置环境变量,步骤如下:
  • 官网下载jdk:https://www.oracle.com/technetwork/java/javase/dowloads/jdk12-dowloads-5295953.html
  • 选择Linux的jdk,版本为12.0.2.
  • 将其解压缩放到centos7的虚拟机上/root。
  • 需要配置环境变量,在/etc/profile文件中配置变量,如下:
export JAVA_HOME=/opt/java/jdk-12.0.1
export JRE_HOME=${JAVA_HOME}/jre
# export MAVEN_HOME=/opt/maven/apache-maven-3.5.0
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
# export PATH=${JAVA_HOME}/Bin:${MAVEN_HOME}/bin:$PATH
export PATH=${JAVA_HOME}/bin:$PATH
1.png
  • java -version 查看版本

zookeepe 安装

  • zookeeper是安装kafka的必要组件,kafka是通过zookeeper來实施对元数据信息的管理,包括集群、主题、分区等内容。
  • 同样在官网下载安装包指定目录解压,步骤如下:
  • 官网:https://zookeeper.apache.org/
    下载并安装
  • 修改zookeeper的配置参数,首先进入安装目录conf目录,并将zoo_sample.cfg文件修改为zoo.cfg,并对核心参数进行配置。
  • zk服务器的心跳时间
    tickTime=2000
  • 投票选举新Leader的初始化时间
    initLimit=10
    syncLimit=5
    dataDir=temp/zookeeper/data
    dataLogDir=temp/zookeeper/log
    clientPort=2181
  • 启动zookeeper命令,bin/zkServer.sh start
    ps -ef | grep zookeeper查看是否启动
    jps -l

kafka安装与部署

  • 官网下载并安装解压缩:https://kafka.apache.org/download
    • 以2.3.0版本为例
    • 启动命令
      bin/kafka-server-start.sh config/server.properties
  • server.properties 配置中需要关注以下几个参数:
broker.id=0 # 表示broker的编号,如果集群中有多个broker,则每个broker的编号需要设置的不同
listeners=PLAINTEXT://:9092 ##brokder对外提供的服务入口地址
log.dirs=/tmp/kafka/log #设置存放消息日志文件的地址
zookeeper.connect=localhost:2181
  • Kafka所需zookeeper的集群地址,教学中zookeeper和kafka都安装本机


    2.png

Kafka测试消息生产与消费

  • 首先创建一个主题
    bin/kafka-topic.sh --zookeeper localhost:2181 --create --topic sword --partitions 2 --replication-factor1
    --zookeeper,指定了所要创建的Zookeeper服务地址
    --topic:指定了所要创建主题的名称
    --partitions: 指定了分区个数
    --replication-factor:指定了副本因子
    --create创建主题的动作命令
  • 展示所有主题bin/kafka-topic.sh --zookeeper localhost:2181 --list
  • 查看主题详情bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic mia
  • 启动消费端接收消息 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mia
    --bootstrap-server 指定了连接kafka集群的地址
    --topic指定了消费端订阅的主题
  • 生产者发送消息 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mia

通过java程序来进行Kafka收发消息的测试

  • java的第一个程序 通过Kafka自身提供的java客户端来测试消息的收发,与Kafka的java客户端相关的Maven依赖如下:


    3.png

消费者详解

  • 消费者和消费组
  • Kafka消费者是消费组的一部分,当多个消费者形成一个消费组来消费主题时,每个消费者会收到不同分区的消息,假设有一个T1主题,该主题有4个分区,同时我们有一个消费组G1,这个消费组只有一个消费者C1,那么消费者C1将会收到这4服务分区的消息,如下:


    4.png

主题

  • 创建主题 bin/kafka-topics.sh-zookeeper localhost:2181 --create --topic sword --partitions 2 --replication-factor 1 localhost:2181
    --replication-factor 用于设置主题副体数,每个副本分布在不通节点,不能超过总结点数。
  • topic元数据信息保存在zookeeper节点中,bin/zkCli.sh -server localhost:2181
    get /brokers/topics/sword
  • 修改主题 bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic sword --config flush.messages=1
  • 删除主题bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic sword --dele-config flush.messages=1
  • 增加分区 bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic sword --partitions 1

分区

  • Kafka可以将主题划分为多个分区,会根据分区规则选择把消息存储到哪个分区,只要如果分区规则设置的合理,那么所有的消息将会被均匀的分布到不同的分区,这样就实现了负载均衡和水平扩展。另外,多个订阅者可以从一个或者多个分区中同时消费数据,以支撑数据处理能力。简单说一句,由于消息是以追加到分区中的,多个分区顺序写磁盘的总效率要比随机写内存还要高(引用apache-A High Throughput Distributed Messaging System的观点),是Kafka高吞吐量的重要保证之一。
  • 副本机制
    • 由于Producer和Consumer
      都只会与Leader角色的分区副本相连,所以Kafka需要以集群的组织形式提供主题下的消息可用。Kafka支持主备复制,所以消息具备高可用和持久性。
    • 一个分区有多个副本,这些副本 保存在不同的broker上,每个分区的副本中都会有一个作为Leader,当一个broker失败时,Leader在这台broker上的分区都会变得不可用,Kafka会自动移除Leader,再其他副本中选一个作为新的Leader。
    • 通常增加分区可以提高Kafka集群的吞吐量,然后也应注意总分区数或是单台服务器上的分区数过多,会增加不可用机延迟的风险。


      5.png
  • 分区Leader选举
  • 可以预见的是,如果某个分区的Leader挂了,那么其他跟随者将会进行选举产生一个新Leader,之后所有的读写就会转移到这个新的Leader上,在Kafka中,其不是采用常见的多数选举的方式进行副本的Leader选举,而是会在Zookeeper上针对每个topic维护一个成为ISR(in-sync replica,已同步的副本)的集合,显然还有一些副本没有来得及同步,只有这个ISR列表里面的才有资格成为Leader(先试用ISR里面的第一个,如果不行依次类推,因为ISR里面的是同步副本,消息是最完整且各个节点都是一样的)
  • 分区重新分配 我们在已经部署好的Kafka集群里面添加机器是正常不过的需求,而且添加起来非常地方便,我们需要做的是从已经部署好的Kafkai节点中复制相应的配置文件,然后将里面的broker id修改为全局唯一的,最后启动这个节点即可将它加入到现有的Kafka集群中。
  • AR(Assigned Replicas) 分区中所有的副本统称为AR
  • ISR(In-Sync Replicas) 所有与Leader部分保持一定程度的副(包括Leader副本在内)本组成ISR
  • OSR(Out-of-Sync Replicas) 与Leader副本同步之后过多的副本
    • 具体步骤:
    • 1.我们创建一个有三个节点的集群bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic sword-par --partitions 3 --replication-factor 3
    • 复制了三个目录
      cp -rf kafka_2.12-2.2.1 ./kafka-01
      cp -rf kafka_2.12-2.2.1 ./kafka-02
      cp -rf kafka_2.12-2.2.1 ./kafka-01
    • 修改一下配置 cd kafka-01
      vi config/Server.properties
    • conf里修改broker-id必须是全局唯一的。
    • zookeeper.connect=localhost:2181
    • port 三个节点不同
    • log.dirs=/opt/kafka/kafka-2/logs
      bin/kafka-server-start.sh config/server.properties
      bin/kafka-topic.sh --describe --zookeeper localhost:2181 --topic sword-par 查看分区信息
    • 分区只能增加,不能减少
      bin/kafka-topic.sh --alter --zookeeper localhost:2181 --topic sword-par --partitions 4
    • 3.再添加一个broker节点 cp -rf kafka-01 ./kafka-04 新参加的主题不参与主题分配
    • 4.重新分配 我们需要将原来分布在broker 1-3节点的分区重新分布到broker1-4节点上,借助kafka-reassign-partitions.sh工具生成reassign plan,不过我们先按照要求定一个文件,里面有说明哪些topic需要重新分区,文件内容如下
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351