Kafka中几个容易混淆的概念
我刚学kafka的时候,对这几个概念有时候会混淆,尤其是配置的时候经常搞不清楚它们的区别。这篇文章打算做一个梳理。
broker-list
broker指的是kafka的服务端,可以是一个服务器也可以是一个集群。producer和consumer都相当于这个服务端的客户端。
broker-list指定集群中的一个或者多个服务器,一般我们再使用console producer的时候,这个参数是必备参数,另外一个必备的参数是topic,如下示例:
C:kafkakafka_2.12-1.1.1
λ .binwindowskafka-console-producer.bat --broker-list localhost:9092 --topic test20190713
>this is a test
>
本地主机如果要模拟多个broker,方法是复制多个server.properties,然后修改里面的端口, broker.id等配置模拟多个broker集群。
比如模拟三个broker的情况,首先把config 目录下的 server.properties 复制两份,分别命名为 server-1.properties 和 server-2.properties,然后修改这两个文件的下列属性,
server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=C:/kafka/broker1
server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=C:/kafka/broker2
broker.id 用来唯一标识每一个 broker,每个broker都有一个唯一的id值用来区分彼此。Kafka在启动时会在zookeeper中/brokers/ids路径下创建一个与当前broker的id为名称的虚节点,Kafka的健康状态检查就依赖于此节点。
我们可以打开一个zk的客户端,通过ls命令来查看下这个路径下的内容:
λ .binwindowszookeeper-shell.bat localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled
ls
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /brokers/ids
[0]
可以看到我们默认启动的这个broker.id为0的节点。
bootstrap-servers vs zookeeper
bootstrap-servers指的是目标集群的服务器地址,这个和broker-list功能是一样的,只不过我们在console producer要求用后者。
以前我们使用console consumer测试消息收发时会这样写:
C:kafkakafka_2.12-1.1.1
λ .binwindowskafka-console-consumer.bat --zookeeper localhost:2181 --topic test20190713
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
这样可以接收到生产者控制台发送的消息。
现在我们也可以这样写,
C:kafkakafka_2.12-1.1.1 λ .binwindowskafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test20190713
你可以自己测试下,也是可以收到消息的。
前者是老版本的用法,0.8以前的kafka,消费的进度(offset)是写在zk中的,所以consumer需要知道zk的地址。后来的版本都统一由broker管理,所以就用bootstrap-server了。
在这里插入图片描述这里插入图片描述
bootstrap-server还可以自动发现其它的broker。
- 排序算法对比、总结(Python代码)
- 记一道未能答出的算法面试题
- 关于numpy mean函数的axis参数
- 在Keras+TF环境中,用迁移学习和微调做专属图像识别系统
- Tensorflow的LRN是怎么做的
- 存储Tensorflow训练网络的参数
- 用Ansible部署ELK STACK
- 十六个有用的Linux命令行技巧
- keras系列︱深度学习五款常用的已训练模型
- 基于VGG19的识别中国人、韩国人、日本人分类器
- 机器学习算法GBDT的面试要点总结
- 了解、接受和利用Java中的Optional (类)
- 一个强化学习 Q-learning 算法的简明教程
- 天池大赛—商场中精确定位用户所在店铺 作品分享
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java之美-死锁
- 恕我直言你可能真的不会java第4篇:Stream管道流Map操作
- 高工也要补基础,wait,notify,join
- 恕我直言你可能真的不会java第5篇:Stream的状态与并行操作
- 恕我直言你可能真的不会java第3篇:Stream的Filter与谓词逻辑
- 恕我直言你可能真的不会java第1篇:lambda表达式会用了么?
- 接口测试框架接入性能测试实践分享
- 熟悉又陌生的 k8s 字段:finalizers
- python+selenium 外部文件导入操作
- 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查
- K8S 生态周报| Istio v1.7.1 发布
- MongoDB设计方法及技巧
- 我要以血和泪的经历告诉你,这个 bug 太难解决了
- Loki和Fluentd的那点事儿
- 恕我直言你可能真的不会java第9篇-元素的匹配与查找