kafka 集群搭建以及常用命令

 

From : JAVA 后端知识点梳理 - Kafka 

Kafka 集群部署

1:下载安装包 

wget http://mirrors.hust.edu.cn/apache/kafka/0.8.2.2/kafka_2.11-0.8.2.2.tgz

2:解压安装包

tar -zxvf /usr/apps/kafka_2.11-0.8.2.2.tgz 

3:修改配置文件

Producer 配置文件详情

############################# Producer Basics #############################

# list of brokers used for bootstrapping knowledge about the rest of the cluster
# format: host1:port1,host2:port2 ...

# 指定Kafka 节点列表,用来获取metadata,不必全部指定
metadata.broker.list=192.168.234.100:9092,192.168.234.101:9092,192.168.234.102:9092 

# 指定个分区处理类,默认kafka.producer.DefaultPartitioner,通过key哈希到对应分区
#partitioner.class=kafka.producer.DefaultPartitioner

# 同步还是异步发送消息,默认 sync 表示同步 async表示异步,异步可以提高发送吞吐量
producer.type=sync

# 是否压缩,默认0不压缩,1表示用gizp压缩,2表示用snappy压缩。压缩后消息中会有头来指明压缩类型,故再消费者端消息解压是透明的无需指定
compression.codec=none

# 指定序列化处理类
serializer.class=kafka.serializer.DefaultEncoder

# 如果要压缩消息,这里指定哪些topic要压缩消息,默认empty,表示不压缩
#compressed.topics=

# 同步模式下设置发送数据是否需要服务端的反馈,有三个值 0,1,-1
# 0:producer不会等待broker发送ack
# 1:当leader接受到消息后,发送ack
#-1:当所有的followers都同步消息成功后发送ack
request.required.acks=0

# 在向producer发送ack之前,broker允许等待的最大时间,如果超市,broker将会向producer发送一个 error ACK
request.timeout.ms=10000

# 在async模式下,当message被缓存的时间超过此值后,将会批量发送给broker,默认5000ms
#queue.buffering.max.ms=5000

# 在async模式下,producer端允许buffer最大消息量
# 无论如何,producer都无法尽快的将消息发送到broker,从而导致消息在producer端大量沉积
# 此时,如果消息的条数达到阀值,将会导致producer端卒社或者消息被抛弃,默认为10000
#queue.buffering.max.messages=10000

# 在async模式下当消息在producer端沉积的条数达到 queue.buffering.max.messages 后
# 阻塞一定事件后,队列任然没有 enqueue (producer 仍然没有发送任何消息)
# 此时producer可以阻塞或者将消息抛弃,次 timeout值 用于控制卒社时间
# -1 :无阻塞超市限制,消息不会被抛弃
# 0  :立即清空队列,消息被抛弃
#queue.enqueue.timeout.ms=

# 如果是异步指定每次批量发送数据量,默认200
#batch.num.messages=200

# 当producer接受到 error ack ,或者没有接受到 ack时,允许消息重发的次数
# 因为broker并没有完整的机制来避免消息重复,随意当网络异常时(比如ACK丢失)
# 有可能导致broker接受到重复的消息,默认值为 3
#message.sed.max.retries=3
############################# Socket Server Settings #############################
# broker全局唯一编号,不能重复
broker.id=0
# 用来监听连接端口,producer或consumer将在此端口建立连接
port=9092
# 
host.name=hadoop01
# 
advertised.host.name=192.168.234.100
# 处理网络请求的线程数量
num.network.threads=3
# 用来处理磁盘IO的线程数量
num.io.threads=8
# 发送套接字的缓存区大小
socket.send.buffer.bytes=102400
# 接收套接字的缓存区大小
socket.receive.buffer.bytes=102400
# 请求套接字的缓存区大小
socket.request.max.bytes=104857600
# kafka运行日志存放路径
log.dirs=/usr/apps/kafka/logs/kafka
# topic在当前broker上的分片数
num.partitions=2
# 用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
# segment文件保留的最长时间,超时将被删除
log.retention.hours=168
# 滚动生成segment文件最大时间
log.roll.hours=168
# 日志文件中每个segment的大小,默认1G
log.segment.bytes=1073741824
# 周期性检查文件大小时间
log.retention.check.interval.ms=300000
# 日志清理是否打开
log.cleaner.enable=true
# broker使用zookeeper保存meta数据
zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181
# zookeeper连接超时时间
zookeeper.connection.timeout.ms=6000
# partion buffer中,消息的条数达到阀值,将出发flush到磁盘
log.flush.interval.messages=10000
# 消息buffer的时间,达到阀值,将触发flush到磁盘
log.flush.interval.ms=3000
############################# Socket Consumer Settings #############################

# zookeeper连接服务器地址
zookeeper.connect=192.168.234.100:2181,192.168.234.101:2181,192.168.234.102:2181
# zookeeper的session过期时间。默认5000ms,用于检测消费者是否挂掉
zookeeper.connection.timeout.ms=5000
# 指定多久消费者更新offset到zookeeper中,注意offset更新时基于time而不是每次获得的消息。
#一旦更新zookeeper发生异常并重启,将可能拿到已拿到过的消息
zookeeper.sync.time.ms=2000
# 当消费者挂掉,其他消费者要等该指定时间才能检查到并重新触发负载均衡
zookeeper.connection.timeout.ms=10000
# 当consumer消费一定量的消息之后,将会自动向zookeeper提交offset信息
# 注意offset信息并不是没消费一次信息就向zk提交一次,而实先在本地保存,并定期提交,默认true
auto.commit.enable=true
# 自动更新时间,默认 60*1000
auto.commit.interval.ms=1000
#consumer group id
group.id=test-consumer-group
# 当前consumer的表示,可以设定,也可以有系统生成,主要用来跟踪消息消费情况,便于观察
#consumer.id=xxx
# 最大取多少块缓存到消费者(默认10)
queued.max.message.chunks=50
#当有新的消费者加入到group中,将会reblance,此后会有partitions的消费端迁移到新的consumer上
#如果一个consumer获得了某个patition的消费权限,他会向zk注册,但旧的consumer可能尚未释放此节点
#该值用来控制,注册节点的重试次数
rebalance.max.retries=5
#获取消息的最大尺寸,broker不会像consumer输出大于此值的消息chunk
#每次fetch将得到多条消息,此值为总大小,提升此值,将会消耗更多的consumer内存
fetch.min.bytes=6553600
#当消息的尺寸不足时,server阻塞的时间,如果超时,消息将立即发送给consumer
fetch.wait.max.ms=5000
socket.receive.buffer.bytes=655360
#如果zookeeper没有offset值或offset值超过范围,那么给个初始的offset
#smallest :最小的 largest 最大的
auto.offset.reset=smallest
#指定序列化处理类
derializer.class=kafka.serializer.DefaultDecoder

4:分发安装包

scp -r /usr/apps/kafka/ root@hadoop02:/usr/apps
scp -r /usr/apps/kafka/ root@hadoop03:/usr/apps

5:再次修改配置文件 (重要)

依次修改各服务器上配置文件的的broker.id,分别是0,1,2不得重复。

6:启动集群

kafka-server-start.sh config/server/properties

Kafka 常用命令

1:查看当前服务器中所有 topic

kafka-topics.sh --zookeeper hadoop01:2181

2:创建 topic

kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 1 --partitions 1 --topic order1029

3:删除 topic

kafka-topics.sh --delete --zookeeper Hadoop01:2181 --topic order1029
#需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启。

4:通过shell 命令发送消息

kafka-console-producer.sh --broker-list hadoop01:9092 --topic order1029

5:通过 shell 消费信息

kafka-console-consumer.sh --zookeeper hadoop01:2181 --from-beginning --topic order1029

6:查看消费位置

kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper hadoop01:2181 --group testGroup

7:查看某个 Topic 的详情

kafka-topics.sh --topic order1029--describe --zookeeper hadoop01:2181

8:对分区数进行修改

kafka-topics.sh --zookeeper  hadoop01 --alter --partitions 15 --topic   utopic
发布了33 篇原创文章 · 获赞 3 · 访问量 5855

猜你喜欢

转载自blog.csdn.net/WandaZw/article/details/105283854