最近在看《Kafka核心技术与实战》专栏,感觉写的不错,作者很用心,比如对于术语的使用非常谨慎,推荐购买,这个专栏可能面向的不是初学者,所以连基本的安装都没有讲解,为此我读了官方的Quickstart,简单描述下在Windows下如何使用。
最近我学习了很多分布式领域的中间件,Kafka无疑是很重要的一个,其实很多分布式中间件的原理还是相同的,比如副本冗余,负载均衡,分区,ZooKeeper的共识。在学习过程中,让我意识到Java的重要性,很多中间件都是使用类Java语言开发的,未来我需要学习一下吗?
废话少说,Kafka源文件下载后,可以同时在Linux和Windows下运行,区别有两点,Windows下是windows/bin代替bin,.bat代替.sh。
1:下载并启动
$ tar -xzf kafka_2.12-2.3.0.tgz
Kafka大量使用ZooKeeper,所以要先启动它,在源文件中已经包含了ZooKeeper,所以无需单独安装。
启动一个单节点的ZooKeeper(画外音,多节点的ZooKeeper才有保障,如何启动?):
$ C:\fbs\kafka2.3\bin\windows>zookeeper-server-start.bat c:\fbs\kafka2.3\config\zookeeper.properties
接下去启动kafka(单个broker,相当于单实例):
$ C:\fbs\kafka2.3\bin\windows\kafka-server-start.bat c:\fbs\kafka2.3\config\server.properties
2:创建一个主题(topic)
Kafak中的消息要保存到一个主题上,每个主题可以有n个分区,每个分区可以有n个副本,接下去创建1个分区,1个副本(仅leader副本)的topic:
$ C:\fbs\kafka2.3\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
# 列出有多少主题
$ bin/kafka-topics.sh --list --bootstrap-server localhost:9092
3:生产和消费
生产者发送消息,每行一个消息:
$ C:\fbs\kafka2.3\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test
hello
world
消费者从头消费消息(消息回溯):
$ C:\fbs\kafka2.3\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
典型的发布/订阅模式,发布者可以在不同的终端,消费者也可以有多个进程。
4:启动broker集群
Kafka是分布式的,所以一般会有多个broker组成在一起成为集群,接下去会再创建两个broker,加上前面的一个broker,集群总共有3个broker。目前还没明白,如何知道这3个是一个集群?
因为我是在自己机器上运行的,3个broker通过port进行区分。
拷贝两个broker配置文件:
$ copy C:\fbs\kafka2.3\config\server.properties C:\fbs\kafka2.3\config\server-1.properties
$ copy C:\fbs\kafka2.3\config\server.properties C:\fbs\kafka2.3\config\server-2.properties
编辑配置文件:
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2
broker.id在集群中名字是唯一的,
接下去运行新增加的2个broker:
$ C:\fbs\kafka2.3\bin\windows\kafka-server-start.bat C:\fbs\kafka2.3\config\server-1.properties &
$ C:\fbs\kafka2.3\bin\windows\kafka-server-start.bat C:\fbs\kafka2.3\config\server-2.properties &
至此,目前集群有3个broker。
5:在集群中创建主题:
接下去创建一个主题:
$ C:\fbs\kafka2.3\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic
查看主题:
$ C:\fbs\kafka2.3\bin\windows\kafka-topics.bat --describe --bootstrap-server localhost:9093 --topic my-replicated-topic
注意上面这条命令 —bootstrap-server 可以指定任意一个 broker(真实场景下,API如何选择可用的 broker?)。
命令输出如下:
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
第一行,目前集群中该topic就一个分区,有3个副本集。
第二行,该分区的leader(所有的write和read都在leader上运行)在第1个分区,共有3个副本集(包含leader),Isr表示slave副本集目前是否落后与leader,如果落后就会摘除。
潜台词:
副本同步几个才算成功
leader和slave如何切换
6:杀死一个broker
$ wmic process where "caption = 'java.exe' and commandline like '%server-1.properties%'" get processid ProcessId
6620
$ taskkill /pid 6020 /f
杀死一个broker,副本集和leader都会变化:
$ C:\fbs\kafka2.3\bin\windows\kafka-topics.bat --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,2
副本集还是有3个,但Isr显示某个副本已经不可用。
后面会使用Python Kafka来操作,大家如果想购买《Kafka核心技术与实战》专栏,可以扫描下面二维码,我给这专栏打8.5分。