03_Kafka集群操作
1、集群配置思路
1)每台节点上要启动一个broker进程,因此要配置每台的server.properties
broker id, log.dirs, zookeeper.connect
2) 每台broker都要连接zookeeper将状态写入,因此要配置每台的zookeeper.properties
dataDir, zookeeper集群snapshot数据的存放地址,和zookeeper集群的配置保持一致
3)zookeeper.properties 可以在一台节点上配置,并分发给其他
4)server.properties 可以在一台节点上配置,分发给其他节点后,修改broker id为各自的id
2、集群配置文件
zookeeper.properties
3台节点的配置相同

server.properties(broker0 )
其他2个节点除了broker.id,都保持相同的配置






3、集群起停
在每个节点上运行启动脚本
# ./bin/kafka-server-start.sh ./config/server.properties
在每个节点上运行停止脚本
# ./bin/kafka-server-stop.sh
4、集群操作
1) Topic查看
# ./bin/kafka-topics.sh --list --zookeeper master:/kafka
--zookeeper参数一定要带 (broker无状态,通过zookeeper维护kafka元数据), chroot进行过修改的话,也一定要带
2)创建Topic
3副本,3个partition
# ./bin/kafka-topics.sh --create --zookeeper master:2181/kafka --topic mytopic --replication-factor --partitions
replication-factor 包括leader和follower在内的所有broker个数
3) 查看Topic描述
# ./bin/kafka-topics.sh --describe --zookeeper master:2181/kafka --topic mytopic

4) 删除Topic
# ./bin/kafka-topics.sh --delete --zookeeper master:2181/kafka --topic mytopic

注意:
1)server.properties中的delete.topic.enable=true, 否则只是标记为删除,并不是真正删除
2)topic的数据会被同时删除,如果因为某些原因导致topic数据不能完全删除,topic只会被marked for deletion
此时创建同名的topic就会出现名称冲突
5) 选择一个节点,启动producer,模拟消息发布
在master上启动producer进程
# ./bin/kafka-console-producer.sh --broker-list master:9092,slave1:9092,slave2:9092 --topic ctopic
写入的数据,每行一条消息,针对每条消息(由于没有key), 随机选择1个partiton进行存储,3条消息被分别存储在了3个partition中
6) 选择一个节点,启动consumer,模拟消息订阅
# ./bin/kafka-console-consumer.sh --topic ctopic --from-beginning --zookeeper master:2181/kafka
在slave1上启动consumer,由于消息分布在3个partition中,因此consumer收到的消息只能保证同一个partition内的有序

7) 模拟broker挂掉,查看partition的leader,ISR变化
slave2挂掉前, topic的partition情况

停止slave2上的broker
# ./bin/kafka-server.stop.sh
slave2挂掉后,topic的partition情况,Partiton的leader和ISR发生了变化

zookeeper中记录broker在线情况的ids目录也发生了变化

8) 恢复broker,查看partition的leader,ISR变化
leader将维持故障后的状态,但ISR(in-sync replica)中slave2将恢复

9)如果想将leader恢复为最初的状态,则可以进行prefer-leader的重新选举
# ./bin/kafka-preferred-replica-election.sh --zookeeper master:2181/kafka
partition的leader将恢复为初始状态

注意:如果server.properties中的auto.leader.rebalance.enable=ture, 则将自动进行preferred-leader选举,自动恢复各个partition的leader为故障前的状态
10)集群节点替换
如果某个broker机器出现故障,无法重启,就需要使用新的机器来代替,主要是做两件事情
1、将新机器kafka配置文件中的broker.id设置为与原机器一样, 配置文件和原始broker保持严格一致
2、启动kafka,注意kafka保存数据的目录不会自动创建,需要手工创建
03_Kafka集群操作的更多相关文章
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- CEPH集群操作入门--配置
参考文档:CEPH官网集群操作文档 概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...
- 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- golang redis集群操作:redis-go-cluster
背景 感觉redis-cli desktop及其难用,最近用golang做了个redis查询工具,支持单例和集群操作,终于不再卡顿!!! 用到的包 "github.com/garyburd/ ...
- java单机操作redis3.2.10和集群操作增删改查
先直接附上单机版的连接和增删改查,7000-7005是端口号 package com.yilian.util; import java.util.HashMap; import java.util.I ...
- redis高级应用(集群搭建、集群分区原理、集群操作)
文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...
- eclipse的hadoop插件对集群操作提示org.apache.hadoop.security.AccessControlException:Permission denied
eclipse的hadoop插件对集群操作提示org.apache.hadoop.security.AccessControlException:Permission denied: user = z ...
- redis系列之4----redis高级应用(集群搭建、集群分区原理、集群操作)
文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...
随机推荐
- js-jquery-对象与JSON字符串互相转换
1:jQuery插件支持的转换方式 代码如下: String→Object$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转 ...
- DOM对象与Jquery对象转换
dom对象的样式是这么加的(js) .style.background = “red”; jquery对象样式是这么加的(jq) .css(“background”,”red”); <div i ...
- PAT 1024 Palindromic Number[难]
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- 搭建私有yum仓库
需要工具: centos7 nginx rsync 新建文件夹存放镜像数据 mkdir /data mkdir /data/yum_data 同步数据 国内开源镜像站没有几个支持rsync,科技大学的 ...
- HTML鼠标悬停改变样式
a.tt:hover {color: #FF0000;} <a class="tt" href="test.html">test</a> ...
- memset函数使用方法
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针. 需要的头文件 在C中 < ...
- TraceSource记录程序日志
1.配置文件 <system.diagnostics> <sources> <source name="TraceError" switchValue ...
- source的简单操作
source五部曲 git工作流:建立新功能 更改文件后,提交 点击git工作流完成新功能 点击推送 点击拉取
- Scrapy: 初识Scrapy
1.初识Scrapy Scrapy是为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘,信息处理或者存储历史数据等一系列的程序中. 2.选择一个网站 当需要从某个网站获取信息时, ...
- appium— Android定位webView里面的UI元素
Android SDK中的UIAutomator中本身是不支持网页中的UI元素定位,下面介绍几种常用的定位app内部的网页的UI元素的方法. 一.使用chrome浏览器调试移动端网页 这是使用最多的一 ...