原文链接:

Kafka Tutorial: Kafka clusters, Kafka consumer failover, and Kafka broker failover (cloudurable.com)

本文主要介绍Kafka集群的容错机制。

在上文中我们在本地windows系统中配置好了Kafka,这里我们开始起一个Kafka集群,然后往集群里发信息,检查消息是否能正确收到。

好了,废话不多说,我们开始。

首先,要起一个Kafka集群。

我们先在上次建好的data目录下面新建三个目录,分别是kafka-0、kafka-1、kafka-2,作为三个集群的日志目录。

然后创建3个Kafka 的server.properties 配置文件。
我们在kafka根目录下创建一个lab2/config目录,然后把文件从config下的server.properties 拷贝到/lab2/config下,

命名成server-0.properties,server-1.properties,server-2.properties

然后修改对应的properties文件:

主要修改一下broker.id,log.dirs和listeners 端口。这里listeners要把hostname 加上,我这里写了localhost。否则Kafka producer 启动的时候,会报一个NETWORK_EXCEPTION的错误。

接下来就可以启动了Kafka 集群了。
启动命令如下:
首先,我们还是启动Zookeeper

zookeeper-server-start.bat ../../config/zookeeper.properties

然后启动KafKa 1、2、3.

kafka-server-start.bat ../../lab2/config/server-0.properties

kafka-server-start.bat ../../lab2/config/server-1.properties

kafka-server-start.bat ../../lab2/config/server-2.properties

命令执行成功,说明三个Kafka broker 启动好了。中间如果出现一些错误,那么就可以把zookeeper也一并kill掉,然后再重新启动一下。

然后我们来create 一个my-failsafe-topic的topic:

kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 13 --topic my-failsafe-topic

这样my-failsafe-topic就创建好了。

接下来我们起两个consumer:

kafka-console-consumer --bootstrap-server localhost:9094,localhost:9093,localhost:9092 --topic my-failsafe-topic --from-beginning

kafka-console-consumer --bootstrap-server localhost:9094,localhost:9093,localhost:9092 --topic my-failsafe-topic --from-beginning

然后起一个producer 往my-failsafe-topic 发送消息。

消息发送成功,接收也没有问题。

2022年8月2号更新,今天有一个大新闻。就是我们有可能收复台湾

接着我们可以再新启两个consumer,我们可以看到,我们的consumer还是把原来的数据都冲头到尾都消费了一遍。

这个是因为我们没有给这些consumer assign consumer group,他们分属于不同的consumer group,这样导致所有的consumer 都需要重新消费一遍。

接下来,我们来新建新的consumer。并且给它指定到同一个consumer group里去。
脚本稍做改动:

kafka-console-consumer --bootstrap-server localhost:9094,localhost:9093,localhost:9092 --topic my-failsafe-topic --consumer-property group.id=mygroup

同样的我们新起3 个consumer,然后往my-failsafe-topic 里发送消息m1到m15,这样我们看到,同一个消息,只会被消费一次。
consumer 1:消费了m2,m4,m8,m10,m14

Consumer 2:消费了m1,m5,m6,m7,m9,m11,m12,m13,m15

Consumer 3:消费了m3

接下来我们来看一下kafka consumer的容错机制
首先,我们先把consumer3 关闭。

然后我们再往my-failsafe-topic里发送消息:m16,m17,m18,m19,m20,m21.我们看到两个consumer 消费消息很平均。
consumer1 消费了m16,m18,m19

Consumer2消费了m17,m20,m21

接下来,我们把consumer2给关了。再往topic:my-failsafe-topic里发送消息,我们能看到:kafka consumer 的failover 机制生效了,producer 发送的消息都被consumer1消费到了。
生产者发了m22,m23,m24,m25。Consumer1也就消费了m22,m23,m24,m25.

如果大家还想看kafka的partition和ISR 信息的话,可以使用如下命令:

kafka-topics.bat --describe --topic my-failsafe-topic --bootstrap-server localhost:2181

--以上

Kafka-Failover笔记相关推荐

  1. Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover

    1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...

  2. 大数据 -- kafka学习笔记:知识点整理(部分转载)

    一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...

  3. Kafka学习笔记(一):什么是消息队列?什么是Kafka?

    目录 一.消息队列的概述 (一)前置知识点 1.集群和分布式 2.队列(Queue)的含义 3.同步与异步的含义 (二)消息队列的含义与特点 二.Kafka (一) 概述 (二) 常用名词含义 导航栏 ...

  4. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...

  5. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  6. kafka整理笔记笔记

    一.为什么需要消息系统 解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多消息 ...

  7. kafka学习笔记(四) --- 压缩算法面面观

    kafka中,压缩,说白了就是,以较少的CPU开销去换更少的磁盘占用或更少的网络I/O传输. 怎么压缩 kafka的消息格式分为两种,社区分别成为V1版本和V2版本,V2版本是在0.11.0.0中正式 ...

  8. Kafka学习笔记-Java简单操作

    Maven依赖包: [plain] view plaincopy <dependency> <groupId>org.apache.kafka</groupId> ...

  9. SpringBoot集成Kafka集群并实现接收_发送消息操作_以及常见错误_亲测---Kafka工作笔记005

    1.注意这个过程中,很重要的是:版本,springboot的版本和spring-kafka的版本要对应起来. 2.我现在发现两个版本是没问题的,一会说明 3.还要注意yml资源文件,或者propert ...

  10. Kafka 学习笔记之 架构

    Kafka的概念: 1. AMQP协议 Advanced Message Queuing Protocol (高级消息队列协议) The Advanced Message Queuing Protoc ...

最新文章

  1. Android怎么隐藏前端,Android-Webview支持缩放并掩藏讨厌的缩放控制条
  2. jQuery的each()方法
  3. USB接口的键盘描述符范例
  4. OpenCV进行图像相似度对比的几种办法
  5. ASP.NET MVC入门(一)---MVC的Hello World
  6. maven生成jar,提示没有“没有主清单属性
  7. 阿里新一代微服务解决方案:Spring Cloud Alibaba
  8. PS 常用的形状工具
  9. 3.4 实时进程的调度
  10. Vue:前端体系、前后端分离
  11. 一度智信:如何提高自己的电商店铺权重
  12. matlab限幅器无饱和怎么设置,基于MATLAB 的直流电动机双闭环调速系统的仿真研究...
  13. excel转pdf的在线免费转换技巧,超实用
  14. 提供推荐--集体智慧编程
  15. 如何修改美食大战老鼠服务器,《美食大战老鼠》联运区组停止运营公告
  16. 智能雷达感应模组应用,让监控更加智能化,雷达存在感应助力安防技术发展
  17. webpack开发配置API代理proxy,解决跨域问题
  18. Android OpenGL ES 基础原理
  19. 通达信指标公式编写基础(二)
  20. 软件测试是否有存在的必要?带你了解测试的重要性!

热门文章

  1. 《关键对话》教你如何摆脱沟通困境
  2. E - Alarm Clock (尺取法)
  3. php模板如何使用,PHP自定义模板标签详细解答,让你轻松驾驭
  4. 微信公众平台消息接口开发(20)图片识别之人脸识别
  5. Androidstudio 连接夜神模拟器
  6. PostgreSQL 配置文件 postgresql.conf 及 postgresql.auto.conf
  7. 测试用例的评审和变更
  8. wordpress 如何添加Canonical 标签(不通过插件)
  9. 出现 -2146959355, ‘服务器运行失败‘ 错误的处理
  10. 鸿蒙系统2.0的编译