Kafka快速开始

BrayIrene 发布于1月前
0 条问题

最近在看《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分。

Kafka快速开始

查看原文: Kafka快速开始

  • bigrabbit
  • beautifullion
  • organicleopard
  • tinyduck867
  • greenbird
需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。