安装

下载与安装

kafka下载地址:https://kafka.apache.org/downloads

需要说明的是,kafka的安装依赖于zk,zk的部署可直接参考《Zookeeper介绍与基本部署》。当然,kafka默认也内置了zk的启动脚本,在kafka安装路径的bin目录下,名称为zookeeper-server-start.sh,如果不想独立安装zk,可直接使用该脚本。

wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz
tar xf kafka_2.12-2.2.0.tgz -C /usr/local/
cd /usr/local
ln -s kafka_2.12-2.2.0 kafka

配置

kafka主配置文件为/usr/local/kafka/config/server.properties,配置示例如下:

broker.id=0
listeners=PLAINTEXT://10.1.60.29:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data/kafka/logs
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=10.1.60.29:2181,10.1.61.195:2181,10.1.61.27:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
auto.create.topics.enable=true
delete.topics.enable=true

配置说明:

  • broker.id:每个broker在集群中的唯一标识,正整数。当该服务器的ip地址发生变更,但broker.id未变,则不会影响consumers的消费情况
  • listeners:kafka的监听地址与端口,在实际测试中如果写0.0.0.0会报错。
  • num.network.threads:kafka用于处理网络请求的线程数
  • num.io.threads:kafka用于处理磁盘io的线程数
  • socket.send.buffer.bytes:发送数据的缓冲区
  • socket.receive.buffer.bytes:接收数据的缓冲区
  • socket.request.max.bytes:允许接收的最大数据包的大小(防止数据包过大导致OOM)
  • log.dirs:kakfa用于保存数据的目录,所有的消息都会存储在该目录当中。可以通过逗号来指定多个路径,kafka会根据最少被使用的原则选择目录分配新的partition。需要说明的是,kafka在分配partition的时候选择的原则不是按照磁盘空间大小来定的,而是根据分配的partition的个数多少而定
  • num.partitions:设置新创建的topic的默认分区数
  • number.recovery.threads.per.data.dir:用于恢复每个数据目录时启动的线程数
  • log.retention.hours:配置kafka中消息保存的时间,还支持log.retention.minutes和log.retention.ms。如果多个同时设置会选择时间最短的配置,默认为7天。
  • log.retention.check.interval.ms:用于检测数据过期的周期
  • log.segment.bytes:配置partition中每个segment数据文件的大小。默认为1GB。超出该大小后,会自动创建一个新的segment文件。
  • zookeeper.connect:指定连接的zk的地址,zk中存储了broker的元数据信息。可以通过逗号来设置多个值。格式为:hostname:port/path。hostname为zk的主机名或ip,port为zk监听的端口。/path表示kafka的元数据存储到zk上的目录,如果不设置,默认为根目录
  • zookeeper.connection.timeout:kafka连接zk的超时时间
  • group.initial.rebalance.delay.ms:在实际环境当中,当将多个consumer加入到一个空的consumer group中时,每加入一个consumer就会触发一次对partition消费的重平衡,如果加入100个,就得重平衡100次,这个过程就会变得非常耗时。通过设置该参数,可以延迟重平衡的时间,比如有100个consumer会在10s内全部加入到一个consumer group中,就可以将该值设置为10s,10s之后,只需要做一次重平衡即可。默认为0则代表不开启该特性。
  • auto.create.topics.enable:当有producer向一个不存在的topic中写入消息时,是否自动创建该topic
  • delete.topics.enable:kafka提供了删除topic的功能,但默认并不会直接将topic数据物理删除。如果要从物理上删除(删除topic后,数据文件也一并删除),则需要将此项设置为true

需要说明的是,多个kafka节点依赖zk实现集群,所以各节点并不需要作特殊配置,只需要broker.id不同,并接入到同一个zk集群即可。

启停操作

#启动
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties #检查java进程 # jps
1394 QuorumPeerMain
13586 Logstash
27591 Kafka
27693 Jps #停止
/usr/local/kafka/bin/kafka-server-start.sh

验证

可以通过zookeeper查看kafka的元数据信息:

#通过zk客户端连接zookeeper

../zookeeper/bin/zkCli.sh 

#查看根下多了很多目录
[zk: localhost:2181(CONNECTED) 1] ls /
[cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config] #查看/brokers/ids,可以看到有三个broker已经加入
[zk: localhost:2181(CONNECTED) 8] ls /brokers/ids
[0, 1, 2] #查看/brokers/topics,目前为空,说明还没有创建任何的topic
[zk: localhost:2181(CONNECTED) 3] ls /brokers/topics
[]

基本操作

创建topic

上面完成了kafka的部署,通过验证部署我们发现当前没有topic,所以创建一个topic如下:

# ./bin/kafka-topics.sh --create --zookeeper localhost:2181  --replication-factor 2 --partitions 3 --topic myfirsttopic
Created topic myfirsttopic.

参数说明:

  • --create:创建一个topic
  • --zookeeper: 指定zookeeper集群的主机列表,多个server可使用逗号分隔,这里因为kafka和zk是在同一个server,所以直接连接了本机的2181端口
  • --replication-factor:指定创建这个topic的副本数
  • --partitions:指定该topic的分区数
  • --topic:指定topic的名称

列出现有的topic

上面通过操作zk就可以看到topic相关信息,接下来我们直接通过kafka命令行来进行相关操作:

# ./bin/kafka-topics.sh --zookeeper localhost:2181 --list
myfirsttopic

查看topic的详细信息

#查看myfirsttopic的详细信息
# ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic myfirsttopic
Topic:myfirsttopic PartitionCount:3 ReplicationFactor:2 Configs:
Topic: myfirsttopic Partition: 0 Leader: 0 Replicas: 0,2 Isr: 0
Topic: myfirsttopic Partition: 1 Leader: 1 Replicas: 1,0 Isr: 1,0
Topic: myfirsttopic Partition: 2 Leader: 2 Replicas: 2,1 Isr: 2,1

参数说明:

  • --describe:查看topic的详细信息

输出说明:

  • leader:当前负责读写的leader broker
  • replicas:当前分区所有的副本对应的broker列表
  • isr:处于活动状态的broker

增加topic的partition数量

# ./bin/kafka-topics.sh --zookeeper localhost:2181 --alter --partitions 6 --topic myfirsttopic
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded! # ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic myfirsttopic
Topic:myfirsttopic PartitionCount:6 ReplicationFactor:2 Configs:
Topic: myfirsttopic Partition: 0 Leader: 0 Replicas: 0,2 Isr: 0
Topic: myfirsttopic Partition: 1 Leader: 1 Replicas: 1,0 Isr: 1,0
Topic: myfirsttopic Partition: 2 Leader: 2 Replicas: 2,1 Isr: 2,1
Topic: myfirsttopic Partition: 3 Leader: 0 Replicas: 0,2 Isr: 0,2
Topic: myfirsttopic Partition: 4 Leader: 1 Replicas: 1,0 Isr: 1,0
Topic: myfirsttopic Partition: 5 Leader: 2 Replicas: 2,1 Isr: 2,1

修改一个topic的副本数

#创建一个topic名为mysecondtopic,指定分区为2,副本为1
# ./bin/kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor 1 --partitions 2 --topic mysecondtopic
Created topic mysecondtopic. #查看新创建的topic详细信息
# ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic mysecondtopic
Topic:mysecondtopic PartitionCount:2 ReplicationFactor:1 Configs:
Topic: mysecondtopic Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: mysecondtopic Partition: 1 Leader: 1 Replicas: 1 Isr: 1 #将broker.id为0上的partition的副本由原来的[0]扩充为[0,2],将broker.id为1上的partition的副本由原来的[1]扩充为[1,2]。
#需要先创建一个json文件如下:
# cat partitions-to-move.json
{
"partitions":
[
{
"topic":"mysecondtopic",
"partition": 0,
"replicas": [0,2]
},
{
"topic": "mysecondtopic",
"partition": 1,
"replicas": [1,2]
}
],
"version": 1
} #执行副本修改
# ./bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file ./partitions-to-move.json --execute
Current partition replica assignment {"version":1,"partitions":[{"topic":"mysecondtopic","partition":1,"replicas":[1],"log_dirs":["any"]},{"topic":"mysecondtopic","partition":0,"replicas":[0],"log_dirs":["any"]}]} Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions. #再次查看topic状态,发现副本数由按照预期发生变更
# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic mysecondtopic
Topic:mysecondtopic PartitionCount:2 ReplicationFactor:2 Configs:
Topic: mysecondtopic Partition: 0 Leader: 0 Replicas: 0,2 Isr: 0
Topic: mysecondtopic Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1

删除一个topic

#执行删除操作
# ./bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic myfirsttopic
Topic myfirsttopic is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true. #查看topic,可以看到myfirsttopic已被删除
# ./bin/kafka-topics.sh --zookeeper localhost:2181 --list
__consumer_offsets
mysecondtopic

通过producer生产消息

# ./bin/kafka-console-producer.sh  --broker-list 10.1.60.29:9092 --topic mysecondtopic
>hello kafka!
>hello world!
>just a test!
>
>hi world!
>hahahaha!
>

通过consumer消费消息

# ./bin/kafka-console-consumer.sh --bootstrap-server 10.1.60.29:9092 --topic mysecondtopic --from-beginning
hello kafka!
just a test!
hi world!
hello world! hahahaha!

Kafka部署篇的更多相关文章

  1. 深度学习Tensorflow生产环境部署(下·模型部署篇)

    前一篇讲过环境的部署篇,这一次就讲讲从代码角度如何导出pb模型,如何进行服务调用. 1 hello world篇 部署完docker后,如果是cpu环境,可以直接拉取tensorflow/servin ...

  2. 大并发量订单处理的 KafKa部署

    大并发量订单处理的 KafKa部署总结 今天要介绍的是消息中间件KafKa,应该说是一个很牛的中间件吧,背靠Apache 与很多有名的中间件搭配起来用效果更好哦 ,为什么不用RabbitMQ,因为公司 ...

  3. 处理大并发量订单处理的 KafKa部署总结

    处理大并发量订单处理的 KafKa部署总结 今天要介绍的是消息中间件KafKa,应该说是一个很牛的中间件吧,背靠Apache 与很多有名的中间件搭配起来用效果更好哦 ,为什么不用RabbitMQ,因为 ...

  4. 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx "I love you"

    菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...

  5. 基于Docker的Kafka部署

    一 准备 1.1 安装docker-dompose #部署 sudo curl -L "https://github.com/docker/compose/releases/download ...

  6. Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了

    Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了 原因:config/server.properties的listeners和advertised.listeners 不配置的话默认的l ...

  7. Kafka 部署指南-好久没有更新博客了

    最近到了一家新公司,很多全新技术栈要理解.每天都在看各类 English Offcial Document,我的宗旨是我既然看懂了,就写下来分享,这是第一篇. 基本需求: 1.已有 zookeeper ...

  8. .Net魔法堂:史上最全的ActiveX开发教程——部署篇

    一.前言 接<.Net魔法堂:史上最全的ActiveX开发教程——发布篇>,后我们继续来部署吧! 二. 挽起衣袖来部署   ActiveX的部署其实就是客户端安装ActiveX组件,对未签 ...

  9. 漫游Kafka设计篇之性能优化

    Kafka在提高效率方面做了很大努力.Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作.读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也 ...

随机推荐

  1. Redis缓存数据库基础

    思维导图xmind文件:https://files-cdn.cnblogs.com/files/benjieming/Redis.zip

  2. node+express修改代码会自动重新运行

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_40822305/artic ...

  3. C++ OpenSSL 之二:生成RSA文件

    1.等同于生成private key: openssl genrsa -out "save_path" 2048 2.代码如下 bool MakeRsaKeySSL(const c ...

  4. (原)ubuntu中C++调用libotrch

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/11479240.html 参考网址: https://pytorch.org/tutorials/ad ...

  5. Python从零开始——基本数据类型

  6. 指针专题6-空指针NULL和void指针

    1 NULL指针 一个指针变量可以指向计算机中任何一块内存,不管该内存有没有被分配,也不管该内存有没有使用权限,只要把地址给他,他就可以指向.C语言没有一种机制保证指向内存的正确性,程序员必须自己提高 ...

  7. Nginx 高级配置-https 功能

    Nginx 高级配置-https 功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTTPS工作过程 1>.SSL/TLS SSL(Secure Socket Lay ...

  8. MobiSystems OfficeSuite 3.60.27307

    官网:https://www.mobisystems.com/ 或 https://www.officesuitenow.com/cn/ MobiSystems OfficeSuite 3.60.27 ...

  9. 2. 代理模式(C++)

    1.介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问.这样实现了业务和核心功能分离. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口.在某些情况下,一个对象不适合或者不能 ...

  10. mysql在windows(含客户端工具)及linux(yum)环境下安装

    下载 地址:https://dev.mysql.com/downloads/ windows安装包下载 linux安装包下载 https://dev.mysql.com/downloads/mysql ...