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集群操作的更多相关文章

  1. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  2. 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  3. CEPH集群操作入门--配置

      参考文档:CEPH官网集群操作文档   概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...

  4. 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  5. golang redis集群操作:redis-go-cluster

    背景 感觉redis-cli desktop及其难用,最近用golang做了个redis查询工具,支持单例和集群操作,终于不再卡顿!!! 用到的包 "github.com/garyburd/ ...

  6. java单机操作redis3.2.10和集群操作增删改查

    先直接附上单机版的连接和增删改查,7000-7005是端口号 package com.yilian.util; import java.util.HashMap; import java.util.I ...

  7. redis高级应用(集群搭建、集群分区原理、集群操作)

    文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...

  8. eclipse的hadoop插件对集群操作提示org.apache.hadoop.security.AccessControlException:Permission denied

    eclipse的hadoop插件对集群操作提示org.apache.hadoop.security.AccessControlException:Permission denied: user = z ...

  9. redis系列之4----redis高级应用(集群搭建、集群分区原理、集群操作)

    文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 ...

随机推荐

  1. js-jquery-对象与JSON字符串互相转换

    1:jQuery插件支持的转换方式 代码如下: String→Object$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转 ...

  2. DOM对象与Jquery对象转换

    dom对象的样式是这么加的(js) .style.background = “red”; jquery对象样式是这么加的(jq) .css(“background”,”red”); <div i ...

  3. PAT 1024 Palindromic Number[难]

    A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...

  4. 搭建私有yum仓库

    需要工具: centos7 nginx rsync 新建文件夹存放镜像数据 mkdir /data mkdir /data/yum_data 同步数据 国内开源镜像站没有几个支持rsync,科技大学的 ...

  5. HTML鼠标悬停改变样式

    a.tt:hover {color: #FF0000;} <a class="tt" href="test.html">test</a> ...

  6. memset函数使用方法

    将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针. 需要的头文件 在C中 < ...

  7. TraceSource记录程序日志

    1.配置文件 <system.diagnostics> <sources> <source name="TraceError" switchValue ...

  8. source的简单操作

    source五部曲 git工作流:建立新功能 更改文件后,提交 点击git工作流完成新功能 点击推送 点击拉取

  9. Scrapy: 初识Scrapy

    1.初识Scrapy Scrapy是为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘,信息处理或者存储历史数据等一系列的程序中. 2.选择一个网站 当需要从某个网站获取信息时, ...

  10. appium— Android定位webView里面的UI元素

    Android SDK中的UIAutomator中本身是不支持网页中的UI元素定位,下面介绍几种常用的定位app内部的网页的UI元素的方法. 一.使用chrome浏览器调试移动端网页 这是使用最多的一 ...