参考地址:https://www.jianshu.com/p/d0e630c8f4ae
一、下载 kafka 二进制安装包
下载地址: http://kafka.apache.org/downloads
二、上传 kafka 压缩包到虚拟机中并解压到指定文件夹
tar -xzf kafka_2.11-2.3.0.tgz
三、启动 kafka 服务
kafka需要使用Zookeeper,首先需要启动Zookeeper服务,如果没有的话,可以使用kafka自带的脚本启动一个简单的单一节点Zookeeper实例:
bin/zookeeper-server-start.sh config/zookeeper.properties &
如果已经启动了 zookeeper,则直接运行下面的命令:
bin/kafka-server-start.sh config/server.properties &
停止 kafka 服务则运行下面命令:
bin/kafka-server-stop.sh config/server.properties
四、kafka 简单使用
4.1、创建一个主题
首先创建一个名为test的topic,只使用单个分区和一个复本
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
4.2、删除主题
bin/kafka-topic.sh --delete --zookeeper localhost:2181 --topic test
上面的提示表示该主题仅仅标记为“待删除”,至于topic是否被真正删除取决于broker端(server.properties)的参数设置delete.topic.enable,若设置为false,那么即使运行了上面的命令,主题也不会被删除。需要说明的是主题的删除时异步的,就算将delete.topic.enable
设置为true,当执行了上面的命令后,也需要根据主题的分片依次进行删除。
4.3、查看主题
bin/kafka-topics.sh --list --zookeeper localhost:2181
4.4、发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
4.5、接收消息
启动一个消费者,消费者会接收到消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
五、 搭建一个多个broker的集群
刚才只是启动了单个broker,现在启动有3个broker组成的集群,这些broker节点也都是在本机上的:
首先为每个节点编写配置文件:
cp config/server.properties config/server_1.properties
cp config/server.properties config/server_2.properties
在拷贝出的新文件中添加以下参数:server_1.properties
broker.id=1 port=9093 log.dir=/tmp/kafka-logs-1
broker.id在集群中唯一的标注一个节点,因为在同一个机器上,所以必须制定不同的端口和日志文件,避免数据被覆盖。
刚才已经启动可Zookeeper和一个节点,现在启动另外两个节点:
bin/kafka-server-start.sh config/server_1.properties &
bin/kafka-server-start.sh config/server_2.properties &
创建一个拥有3个副本的topic:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic zx_test
现在我们搭建了一个集群,怎么知道每个节点的信息呢?运行“"describe topics”命令就可以了:
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic zx_test
下面解释一下这些输出。第一行是对所有分区的一个描述,然后每个分区都会对应一行,因为我们只有一个分区所以下面就只有一行。
leader:负责处理消息的读和写,leader是从所有节点中随机选择的.
replicas:列出了所有的副本节点,不管节点是否在服务中.
isr:是正在服务中的节点.
在我们的例子中,节点1是作为leader运行。
向topic发送消息:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic zx_test
消费这些消息:(三个副本,任意一个端口即可)
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092/9093/9094 --topic zx_test--from-beginning
测试一下容错能力:Broker 1作为leader运行,现在我们kill掉它:
ps -ef|grep server-1.properties
kill -9 xxxx
另外一个节点被选做了leader,node 1 不再出现在 in-sync 副本列表中:
虽然最初负责续写消息的leader down掉了,但之前的消息还是可以消费的。