Kafka详解二、如何配置Kafka集群

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介:
Kafka集群配置比较简单,为了更好的让大家理解,在这里要分别介绍下面三种配置
  • 单节点:一个broker的集群
  • 单节点:多个broker的集群
  • 多节点:多broker集群

一、单节点单broker实例的配置


1. 首先启动zookeeper服务

     Kafka本身提供了启动zookeeper的脚本(在kafka/bin/目录下)和zookeeper配置文件(在kafka/config/目录下),首先进入Kafka的主目录(可通过 whereis kafka命令查找到):
      [root@localhost kafka-0.8]# bin/zookeeper-server-start.sh config/zookeeper.properties
     zookeeper配置文件的一些重要属性:
      # Data directory where the zookeeper snapshot is stored.
      dataDir=/tmp/zookeeper
     # The port listening for client request
      clientPort=2181
     默认情况下,zookeeper服务器会监听 2181端口,更详细的信息可去zookeeper官网查阅。

2. 启动Kafka broker

     运行kafka提供的启动kafka服务脚本即可:
      [root@localhost kafka-0.8]# bin/kafka-server-start.sh config/server.properties
     broker配置文件中的重要属性:
      # broker的id. 每个broker的id必须是唯一的.
       Broker.id=0
     # 存放log的目录
       log.dir=/tmp/kafka8-logs
     # Zookeeper 连接串
      zookeeper.connect=localhost:2181

3. 创建一个仅有一个Partition的topic 

      [root@localhost kafka-0.8]# bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic kafkatopic

4. 用Kafka提供的生产者客户端启动一个生产者进程来发送消息

      [root@localhost kafka-0.8]# bin/kafka-console-producer.sh --broker-list  localhost:9092 --topic kafkatopic
     其中有两个参数需要注意:
  • broker-list:定义了生产者要推送消息的broker地址,以<IP地址:端口>形式     
  • topic:生产者发送给哪个topic
     然后你就可以输入一些消息了,如下图: 

5. 启动一个Consumer实例来消费消息

      [root@localhost kafka-0.8]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic kafkatopic --from-beginning
      当你执行这个命令之后,你便可以看到控制台上打印出的生产者生产的消息:

     和消费者相关的属性配置存放在Consumer.properties文件中,重要的属性有:
     # consumer的group id (A string that uniquely identifies a set of consumers
     # within the same consumer group) 
      groupid=test-consumer-group
     # zookeeper 连接串
      zookeeper.connect=localhost:2181

二、单节点运行多broker实例


1.启动zookeeper 

   和上面的一样

2.启动Kafka的broker

   要想在一台机器上启动多个broker实例,只需要准备多个server.properties文件即可,比如我们要在一台机器上启动两个broker:
   首先我们要准备两个server.properties配置文件
  1. server-1
    1. brokerid=1
    2. port=9092
    3. log.dir=/temp/kafka8-logs/broker1    
  2. server-2
    1. brokerid=2
    2. port=9093
    3. log.dir=/temp/kafka8-logs/broker2 
     然后我们再用这两个配置文件分别启动一个broker
      [root@localhost kafka-0.8]# env JMX_PORT=9999 bin/kafka-server-start.sh config/server-1.properties
     [root@localhost kafka-0.8]# env JMX_PORT=10000 bin/kafka-server-start.sh config/server-2.properties
     可以看到我们启动是为每个broker都指定了不同的JMX Port,JMX Port主要用来利用jconsole等工具进行监控和排错

3.创建一个topic

     现在我们要创建一个含有两个Partition分区和2个备份的broker:
      [root@localhost kafka-0.8]# bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 2 --partition 2 --topic othertopic

4.启动Producer发送消息

     如果我们要用一个Producer发送给多个broker,唯一需要改变的就是在broker-list属性中指定要连接的broker:
      [root@localhost kafka-0.8]# bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic othertopic
     如果我们要让不同的Producer发送给不同的broker,我们也仅仅需要为每个Producer配置响应的broker-list属性即可。

5.启动一个消费者来消费消息

     和之前的命令一样
      [root@localhost kafka-0.8]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic othertopic --from-beginning

三、集群模式(多节点多实例)

     介绍了上面两种配置方法,再理解集群配置就简单了,比如我们要配置如下图所示集群:
      zookeeper配置文件(zookeeper.properties):不变
      broker的配置配置文件(server.properties):按照单节点多实例配置方法在一个节点上启动两个实例,不同的地方是zookeeper的连接串需要把所有节点的zookeeper都连接起来
         # Zookeeper 连接串
         zookeeper.connect=node1:2181,node2:2181




   想更深入的了解Kafka请参阅我的另一篇文章: 《Kafka设计与原理详解》






目录
相关文章
|
搜索推荐 前端开发 JavaScript
什么是百度优化?百度SEO优化解决方案
百度优化的解决方案不仅可以帮助企业提升网站在百度PC端的收录与关键词排名,也可以获得更好的移动端收录与关键词排名,从而达到品牌SEO推广及引流的目的。接下来小编为你详细分享什么是百度优化以及实用的解决方案,一起来看看吧。
1486 0
|
Kubernetes 搜索推荐 数据安全/隐私保护
Containerd ctr、crictl、nerdctl 实战
Containerd ctr、crictl、nerdctl 实战
4261 1
|
机器学习/深度学习 人工智能 安全
人工智能在网络安全中的入侵检测与防御
人工智能在网络安全中的入侵检测与防御
|
数据可视化 数据挖掘 知识图谱
精选:15款顶尖Python知识图谱(关系网络)绘制工具,数据分析的强力助手
这里有15款免费工具推荐:NetworkX(Python基础),Graph-tool(C++速度),Graphviz(可视化库),ipycytoscape(Jupyter集成),ipydagred3,ipySigma(NetworkX + Web),Netwulf(交互式),nxviz(Matplotlib绑定),Py3plex(复杂网络分析),Py4cytoscape(Python+Cytoscape),pydot(Graphviz接口),PyGraphistry(GPU加速),python-igraph,pyvis(交互式图形),SNAP(大规模网络分析)。绘制和理解网络图从未如此简单!
920 0
|
供应链 监控 搜索推荐
ERP系统中的订单管理与供应链协作解析
【7月更文挑战第25天】 ERP系统中的订单管理与供应链协作解析
904 6
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
31967 78
如何保证分布式文件系统的数据一致性
|
存储 Android开发
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
387 0
|
消息中间件 数据可视化 Java
Kafka集群搭建可视化指南
Kafka集群搭建可视化指南
262 0
|
JavaScript
win10执行npm出现Error: EBUSY: resource busy or locked 错误解决方法
win10执行npm出现Error: EBUSY: resource busy or locked 错误解决方法
1404 0
win10执行npm出现Error: EBUSY: resource busy or locked 错误解决方法
|
Ubuntu Linux Shell
Linux服务器安装宝塔面板命令大全(各版本Linux)
Linux服务器安装宝塔BT面板命令大全,包括Centos、Ubuntu、Deepin及Fedora的安装命令,云服务器吧分享: 宝塔面板安装要求 内存:512M以上,推荐768M以上(纯面板约占系统60M内存) 硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间) 系统:CentOS 7.
7622 0