携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
5.1 阻塞队列
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入门
-
Broker:Kafka的服务器,每一台服务器称其为Broker
-
Zookeeper:可以用 Zookeeper 管理 Kafka 的集群
-
Topic:主题,理解为文件夹,用来存放消息的位置
-
Partition:分区,是对主题位置的分区
-
Offset:消息在分区内存放的索引
-
Leader Replica:祖副本,可以从祖副本读数据,也可以对数据做备份,
-
Follower Replica:随从副本,只是备份
Kafka下载
kafka不分操作系统,都是一个包
配置 zookeeper.properties
Zookeeper 在运行的时候会产生一些数据,这些数据应该存在哪?
然后配置server.properties:
演示一下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
这个命令行窗口不要关,再启动一个命令行窗口去启动Kafka
d:
cd d:\work\kafka_2.13-3.2.0
bin\windows\kafka-server-start.bat config\server.properties
启动kafka,指定配置文件启动
现在 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
启动生产者发消息
kafka-console-producer.bat --broker-list localhost:9092 --topic test
再开一个cmd启动消费者查看消息
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning