5.1 阻塞队列、5.2 Kafka入门

216 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情

5.1 阻塞队列

image-20220723134757713

public class BlockingQueueTests {

    public static void main(String[] args) {
        BlockingQueue queue = new ArrayBlockingQueue(10);
        new Thread(new Producer(queue)).start();
        new Thread(new Consumer(queue)).start();
        new Thread(new Consumer(queue)).start();
        new Thread(new Consumer(queue)).start();
    }
}

class Producer implements Runnable{

    private BlockingQueue<Integer> queue;

    public Producer(BlockingQueue<Integer> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        try {
            for (int i = 0; i < 100; i++) {
                Thread.sleep(20);
                queue.put(i);
                System.out.println(Thread.currentThread().getName() + "生产:" + queue.size());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
class Consumer implements Runnable {

    private BlockingQueue<Integer> queue;

    public Consumer(BlockingQueue<Integer> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        try {
            while (true) {
                Thread.sleep(new Random().nextInt(1000));   // 睡觉(随机数,1000ms之内)
                queue.take();
                System.out.println(Thread.currentThread().getName() + "消费:" + queue.size());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5.2 Kafka入门

image-20220723201608455

kafka.apache.org

  • Broker:Kafka的服务器,每一台服务器称其为Broker

  • Zookeeper:可以用 Zookeeper 管理 Kafka 的集群

  • Topic:主题,理解为文件夹,用来存放消息的位置

  • Partition:分区,是对主题位置的分区

  • Offset:消息在分区内存放的索引

  • Leader Replica:祖副本,可以从祖副本读数据,也可以对数据做备份,

  • Follower Replica:随从副本,只是备份

Kafka下载

kafka不分操作系统,都是一个包

image-20220723212214770

image-20220723204701963

image-20220723205004180

image-20220723205108259

配置 zookeeper.properties

Zookeeper 在运行的时候会产生一些数据,这些数据应该存在哪?

image-20220723205630925

然后配置server.properties

image-20220723210009072

演示一下Kafka命令

得先启动 Zookeeper ,因为 Kafka依赖于 Zookeeper ,还有指定使用config目录下 zookeeper.properties 配置文件

d:

cd d:\work\kafka_2.13-3.2.0


bin\windows\zookeeper-server-start.bat config\zookeeper.properties

image-20220723210823858

这个命令行窗口不要关,再启动一个命令行窗口去启动Kafka

d:

cd d:\work\kafka_2.13-3.2.0

bin\windows\kafka-server-start.bat config\server.properties

启动kafka,指定配置文件启动

image-20220723213424934

现在 Zookeeper 和 kafka 都启动了,要使用 kafka,(以前的cmd不要关)再启动一个cmd

创建 Topic(主题)

d:

cd d:\work\kafka_2.13-3.2.0\bin\windows

kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

上面命令: 1个副本     1个分区   主题名字:test


查看所有主题

kafka-topics.bat --list --bootstrap-server localhost:9092

image-20220723214445057

启动生产者发消息

kafka-console-producer.bat --broker-list localhost:9092 --topic test

image-20220723214817319

再开一个cmd启动消费者查看消息

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

image-20220723215210380