Kafka初探(二)

307 阅读2分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

  • 建立kafka集群:

    • bin目录下 启动zookeeper

    • 启动kafka-server-start 配置文件

      配置文件中可以指定端口,bokerid,日志目录(其实就是partition),partition数量

    • // 创建topic,并且他的partition数量是3个
      sh kafka-topics.sh --zookeeper localhost:2181 --create --topic test1 --partitions 3 --replication-factor 1 
      
      //  这条命令让我们看到创建的topic
      sh kafka-topics.sh --zookeeper localhost:2181 --describe --topic test1
      
    • // 创建一个消费者
      sh kafka-console-consumer.sh --zookeeper localhost:2181 --topic test1
      
    • // 创建一个生产者,给指定broker和topic放入数据
      sh kafka-console-producer.sh --broker-list localhost:9092 --topic test1
      
  • 消息怎么知道去哪个partition呢?

    有几个策略:在接口partitioner中实现

    • 哈希一致算法,根据key的hash值来确定
    • 循环,一个一个来。RoundRobin
  • 同步的生产者和异步的生产者

    • 同步:我把消息放到partition中,必须消费完,才能放入下一个,如果失败就是重试,超过三次就会抛出,好处就是低延迟但是吞吐量不高(当然我们可以一次性发送一组数据)。
    • 异步反之。是有个队列,放在队列中。只有等到队列达到一定长度或者一定时间的时候,才会发送。
  • replica

    1. 个partition会有N个replica,这些replica会均匀分布在不同的broker中。绝对不再自己leader那个broker中 在这里插入图片描述

    2. replica要解决的问题:

      • 怎么如何将数据扩散出去

        producer讲数据给到leader,follower是主动去拉取的,这和消费者主动去拉是相似的。

        读操作也是读leader的数据

      • 何时commit

        commit是指什么时候告诉producer你的数据我已经保存了,这个时候kafka一定要保证这条数据是不能丢失的。我们首先讲一下同步复制和异步复制,同步复制就是等到follow全部复制leader的数据完成,才发送commit,异步就是leader得到了数据以后就发送commit。

        kafka的策略呢?既有同步也有异步,他的leader维护了一个他所有follwer的列表ISR,如果这些follwer中有的落后太多(可以设置参数,可以是相差的时间,可以是相差的数据),就把这些follwer移除,另外如果这些follwer慢慢的恢复过来,就把他们重新加进来。当所有的follwer都给leader发送ack的时候,leader就commit。