kafka zookeeper 认证_linux


kafka教程

以前我们已经成功创建了Zookeeper集成,现在是时候添加一些将连接到该集成的Kafka代理了,我们将执行一些命令。

kafka zookeeper 认证_大数据_02

<div> 
     <img src="https://s2.51cto.com/images/blog/202410/07091948_670337342be0870059.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=" alt="">
</div> 
     
 我们将从先前编译的同一docker compose文件中提取。 首先,让我们跳一下Kafka代理所需

的配置。

offsets.topic.replication.factor= 1
 transaction.state.log.replication.factor= 1
 transaction.state.log.min.isr= 1
 group.initial.rebalance.delay.ms= 0
 socket.send.buffer.bytes= 102400
 delete.topic.enable= true
 socket.request.max.bytes= 104857600
 log.cleaner.enable= true
 log.retention.check.interval.ms= 300000
 log.retention.hours= 168
 num.io.threads= 8
 broker.id= 0
 log4j.opts=-Dlog4j.configuration=file:/etc/kafka/log4j.properties
 log.dirs=/var/lib/kafka
 auto.create.topics.enable= true
 num.network.threads= 3
 socket.receive.buffer.bytes= 102400
 log.segment.bytes= 1073741824
 num.recovery.threads.per.data.dir= 1
 num.partitions= 1
 zookeeper.connection.timeout.ms= 6000
 zookeeper.connect=zookeeper- 1 : 2181 ,zookeeper- 2 : 2181 ,zookeeper- 3 : 2181

将经历那些必不可少的知识。

  • offsets.topic.replication.factor:如何复制内部偏移量主题–复制因子
  • transaction.state.log.replication.factor:如何复制内部事务主题–复制因子
  • transaction.state.log.min.isr:内部事务主题的最小同步副本
  • delete.topic.enable:如果不是true,Kafka将忽略delete topic命令
  • socket.request.max.bytes:请求的最大大小
  • log.retention.check.interval.ms:评估是否应删除日志的间隔
  • log.retention.hours:删除日志之前要保留多少小时
  • broker.id:该安装的代理ID是什么
  • log.dirs:Kafka将存储日志数据的目录,可以用逗号分隔
  • auto.create.topics.enable:如果在发送/使用消息或询问主题元数据时不存在主题,则创建主题
  • num.network.threads:接收来自网络的请求和发送响应的线程
  • socket.receive.buffer.bytes:服务器套接字的缓冲区
  • log.segment.bytes:日志文件的大小
  • num.recovery.threads.per.data.dir:启动时用于日志恢复以及关闭时用于刷新的线程
  • num.partitions:与未指定分区号的主题创建后的默认分区号有关。
  • zookeeper.connection.timeout.ms:客户端与ZooKeeper建立连接所需的时间
  • zookeeper.connect:是ZooKeeper服务器的列表

现在是时候为每个代理创建属性了。 由于broker.id属性,我们需要使用相应的broker.id创建不同的文件

因此,我们的第一个经纪人文件如下所示(broker.id 1)。 请记住,这些代理将在相同的docker-compose文件上运行。 因此,zookeeper.connect属性包含内部docker compose dns名称。 该文件的名称将命名为server1.properties。

socket.send.buffer.bytes= 102400
 delete.topic.enable= true
 socket.request.max.bytes= 104857600
 log.cleaner.enable= true
 log.retention.check.interval.ms= 300000
 log.retention.hours= 168
 num.io.threads= 8
 broker.id= 1
 transaction.state.log.replication.factor= 1
 log4j.opts=-Dlog4j.configuration\=file\:/etc/kafka/log4j.properties
 group.initial.rebalance.delay.ms= 0
 log.dirs=/var/lib/kafka
 auto.create.topics.enable= true
 offsets.topic.replication.factor= 1
 num.network.threads= 3
 socket.receive.buffer.bytes= 102400
 log.segment.bytes= 1073741824
 num.recovery.threads.per.data.dir= 1
 num.partitions= 1
 transaction.state.log.min.isr= 1
 zookeeper.connection.timeout.ms= 6000
 zookeeper.connect=zookeeper- 1 \: 2181 ,zookeeper- 2 \: 2181 ,zookeeper- 3 \: 2181

同样的配方适用于broker.id = 2和broker.id = 3

创建了这三个代理配置文件之后,该更改docker-compose配置了。

version: "3.8"
 services:

  zookeeper-1:

    container_name: zookeeper-1

    image: zookeeper

    ports:

      - "2181:2181"

    environment:

      ZOO_MY_ID: "1"

      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181

  zookeeper-2:

    container_name: zookeeper-2

    image: zookeeper

    ports:

      - "2182:2181"

    environment:

      ZOO_MY_ID: "2"

      ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181

  zookeeper-3:

    container_name: zookeeper-3

    image: zookeeper

    ports:

      - "2183:2181"

    environment:

      ZOO_MY_ID: "3"

      ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181

  kafka-1:

    container_name: kafka-1

    image: confluent /kafka

    ports:

    - "9092:9092"

    volumes:

    - type : bind

      source : . /server1 .properties

      target: /etc/kafka/server .properties

  kafka-2:

    container_name: kafka-2

    image: confluent /kafka

    ports:

      - "9093:9092"

    volumes:

      - type : bind

        source : . /server2 .properties

        target: /etc/kafka/server .properties

  kafka-3:

    container_name: kafka-3

    image: confluent /kafka

    ports:

      - "9094:9092"

    volumes:

      - type : bind

        source : . /server3 .properties

        target: /etc/kafka/server .properties

让我们启动docker-compose文件。

> docker-compose -f docker-compose.yaml up

就像前面的示例一样,我们将在容器中运行一些命令。

现在,我们已经与Zookeeper和多个Kafka经纪人建立了一个适当的集群,现在该测试它们是否一起工作。第一个操作是创建一个复制因子为3的主题。预期的结果将是对该主题进行复制3 kafka经纪人

> docker exec -it kafka-1 /bin/bash
 confluent@92a6d381d0db:/$ kafka-topics --zookeeper zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181 --create --topic tutorial-topic --replication-factor 3 --partitions 1

我们的主题已创建,让我们检查主题的描述。

confluent@92a6d381d0db:/$ kafka-topics --describe --topic tutorial-topic --zookeeper zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
 Topic:tutorial-topic   PartitionCount:1   ReplicationFactor:3 Configs:

    Topic: tutorial-topic  Partition: 0   Leader: 2  Replicas: 2,1,3 Isr: 2,1,3

如我们所见,分区的领导者是经纪人2

下一步是将一些数据放入最近创建的主题。 在执行此操作之前,我将添加一个使用者以侦听该主题的消息。 在我们将消息发布到主题时,这些消息将由该消费者打印。

> docker exec -it kafka-3 /bin/bash
 confluent@4042774f8802:/$ kafka-console-consumer --topic tutorial-topic --from-beginning --zookeeper zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181

让我们添加一些主题数据。

> docker exec -it kafka-1 /bin/bash
 confluent@92a6d381d0db:/$ kafka-console-producer --topic tutorial-topic --broker-list kafka-1:9092,kafka-2:9092
 test1
 test2
 test3

正如预期的那样,另一个终端上的使用者将打印预期的消息。

test1
 test2
 test3

由于具有集群,最好停止领导经纪人,并请其他经纪人担任领导。 在执行此操作时,预期结果将是复制所有消息,并且不会中断使用和发布消息。

停止领导者是经纪人2

> docker stop kafka-2

检查其他经纪人的领导

confluent@92a6d381d0db:/$ kafka-topics --describe --topic tutorial-topic --zookeeper zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
 Topic:tutorial-topic   PartitionCount:1   ReplicationFactor:3 Configs:

    Topic: tutorial-topic  Partition: 0   Leader: 1  Replicas: 2,1,3 Isr: 1,3

领导者现在是kafka-1

阅读消息以确保它们确实已被复制。

> docker exec -it kafka-3 /bin/bash
 confluent@4042774f8802:/$ kafka-console-consumer --topic tutorial-topic --from-beginning --zookeeper zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
 test1
 test2
 test3

正如预期的那样,除了建立领导层外,我们的数据也已被复制!

如果我们尝试发布新消息,这也将是成功的行动。

因此,总而言之,我们确实运行了一个与动物园管理员集成的Kafka集群。 我们确实创建了一个对3个代理启用了复制的主题,最后但并非最不重要的一点是,我们测试了如果一个代理发生故障会发生什么。

在下一个博客中,我们将对其进行包装,以便我们的本地计算机客户端可以连接到docker compose集成。

翻译自: https://www.javacodegeeks.com/2020/11/kafka-zookeeper-for-development-connecting-brokers-to-the-ensemble.html

kafka教程