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:2181/kafka

--zookeeper参数一定要带 (broker无状态,通过zookeeper维护kafka元数据),  chroot进行过修改的话,也一定要带

2)创建Topic
3副本,3个partition

# ./bin/kafka-topics.sh --create --zookeeper master:2181/kafka --topic mytopic --replication-factor 3 --partitions 3

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保存数据的目录不会自动创建,需要手工创建

时间: 2024-08-02 13:44:56

03_Kafka集群操作的相关文章

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

本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态.Redi

Openstack之Ceph集群操作

Oepnstack之CEPH系列是根据Ceph Cookbook整理的笔记,分为以下几个部分: 1. <Ceph简介> 2. <Ceph集群操作> 3. <Ceph块设备管理与Openstack配置> 4. <深入Ceph> 5. <ceph优化与性能测试> **注意:此文对应ceph版本为10.1.2** ~~~bash #ceph -v ceph version 10.1.2(4a2a6f72640d6b74a3bbd92798bb913ed

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

文章主目录 Redis集群简介 Redis集群搭建 Redis集群分区原理 集群操作 参考文档 本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. 回到顶部 Redis集群简介 Redis 集群是3.0之后才引入的,在3.0

redis集群介绍、redis集群搭建配置、redis集群操作

一:redis集群介绍 多个redis节点网络互联,数据共享所有的节点都是一主一从(可以是多个从),其中从不提供服务,仅作为备用不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个节点上,并发量很高的情况下同时创建键值会降低性能并导致不可预测的行为.支持在线增加.删除节点客户端可以连任何一个主节点进行读写 二:redis集群搭建配置 场景设置:两台机器,分别开启三个Redis服务(端口)A机器上三个端口7000,7002,7004,全部为主B机器上三个端口7001,

rediscluster 集群操作(摘抄)

一:关于redis cluster 1:redis cluster的现状 目前redis支持的cluster特性 1):节点自动发现 2):slave->master 选举,集群容错 3):Hot resharding:在线分片 4):进群管理:cluster xxx 5):基于配置(nodes-port.conf)的集群管理 6):ASK 转向/MOVED 转向机制. 2:redis cluster 架构 1)redis-cluster架构图 架构细节: (1)所有的redis节点彼此互联(P

Redis集群操作手册

一.原始集群(6节点 3主3从): (1)启动集群: [[email protected] ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001/redis.conf [[email protected] ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7002/redis.conf [[email protected] ~]# /usr

redis集群操作:增加和减少节点

一  增加节点: STEP1:  我们新建俩个服务,按照之前搭建的集群方式新增俩个节点:(一主一从master.slave) Master:7007   Slave: 7008 (1)创建7007/7008文件夹.拷贝redis.conf文件到对于的7007,7008目录下要进行修改配置文件. <root@localhost redis-cluster># mkdir 7007 7008 <root@localhost redis-cluster># cp 7001/redis.c

Redis集群的高可用测试(含Jedis客户端的使用)

Redis集群的使用测试(Jedis客户端的使用) 1.  Jedis客户端建议升级到最新版(当前为2.7.3),这样对3.0.x集群有比较好的支持. https://github.com/xetorthio/jedis http://mvnrepository.com/artifact/redis.clients/jedis 2.  直接在Java代码中链接Redis集群: // 数据库链接池配置 JedisPoolConfig config = new JedisPoolConfig();

Tomcat集群环境下session共享方案梳理(1)-通过memcached(MSM)方法实现

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据: 另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据. Tomcat集群session同步方案有以下几种方式: 1)使用tomcat自带的