Linux下安装kafka

下载、安装

官网下载

然后解压

> tar -xzf kafka_2.11-0.10.2.0.tgz
> cd kafka_2.11-0.10.2.0

linux用户使用bin/目录下的命令,Windows用户可以使用bin/windows/下的命令

使用

启动服务

kafka依赖于ZooKeeper,如果没有安装zookeeper,可以用kafka包里面现成的:

> bin/zookeeper-server-start.sh config/zookeeper.properties
[2017-06-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...

然后启动kafka

> bin/kafka-server-start.sh config/server.properties
[2017-06-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2017-06-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...

创建主题

创建一个test主题,1个分区,1个副本

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  •  

看一眼刚才创建的主题

> bin/kafka-topics.sh --list --zookeeper localhost:2181
test

注:如果不想手动创建主题,你可以自动创建

发消息

运行kafka自带的客户端发一些消息试试。默认情况下,每一行作为一条消息发出去。

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message

消费

然后用kafka自带的消费者输出

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

提示: 
如果上面的每个命令都在不同的终端中运行,你就可以在生产者终端中输入消息后,在消费者终端中看到。

启动一个多broker的集群

目前我们已经运行了一个单broker的kafka,只是有一个节点的集群。再让我们扩展到三个节点玩一下。

为其他两个节点复制一下配置文件:

> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties

修改一下配置:

config/server-1.properties:
    broker.id=1
    listeners=PLAINTEXT://:9093
    log.dir=/tmp/kafka-logs-1

config/server-2.properties:
    broker.id=2
    listeners=PLAINTEXT://:9094
    log.dir=/tmp/kafka-logs-2

abroker.id是集群中每个节点的唯一识别。我们也要改一下节点的端口和日志路径,主要因为是在本地环境,如果在多台机器上,就可以不改端口和日志路径了。

前面已经启动了zk,和一个几点,现在我们只需启动另外两个节点:

> bin/kafka-server-start.sh config/server-1.properties &
...
> bin/kafka-server-start.sh config/server-2.properties &
...

现在我们创建一个1个分区3个副本的新主题:

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
  •  

现在我们有一个kafka集群了,那么我们怎么知道哪个broker在做什么呢? 运行describe topics命令看看:

> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: my-replicated-topic  Partition: 0    Leader: 1   Replicas: 1,2,0 Isr: 1,2,0

第一行给出了所有分区的摘要,每个附加行提供有关一个分区的信息。 因为这个主题只有一个分区,只有一行。

  • “leader”是负责给定分区的所有读取和写入的节点。 每个节点将成为随机选择的分区部分的引导者。
  • “replicas”是复制此分区日志的节点的列表,无论它们是不是leader。
  • “isr”是一组“同步”副本。 这是副本列表的子集,该副本目前正在生效并被leader所追踪。

我们可以再看一下最开始创建的test主题

> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test  PartitionCount:1    ReplicationFactor:1 Configs:
    Topic: test Partition: 0    Leader: 0   Replicas: 0 Isr: 0

往新的主题发一些消息:

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
...
my test message 1
my test message 2

消费一下这些消息:

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2

容错

现在我们来测试容错。 broker 1作为 leader,我们kill一下试试:

> ps aux | grep server-1.properties
7564 ttys002    0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8/Home/bin/java...
> kill -9 7564

win用户可以用这个命令:

> wmic process get processid,caption,commandline | find "java.exe" | find "server-1.properties"
java.exe    java  -Xmx1G -Xms1G -server -XX:+UseG1GC ... build\libs\kafka_2.10-0.10.2.0.jar"  kafka.Kafka config\server-1.properties    644
> taskkill /pid 644 /f

leader已切换到其中一个slaves节点,节点1不再处于同步副本集中:

> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: my-replicated-topic  Partition: 0    Leader: 2   Replicas: 1,2,0 Isr: 2,0

不过消息仍然可以消费,即便刚才的leader已经挂掉了:

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2

参考

官方文档

猜你喜欢

转载自blog.csdn.net/u014252478/article/details/82151484