Kafka入门(一)

128 阅读4分钟

Kafka入门一

启动:

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

创建topic test

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

List topics

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

kafka集群常用配置

broker.id

log.dirs

Zookeeper.connect

生产者生产消息

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
hello world!
this is my first msg.

消费者消费消息

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

Kafka入门二-Producer核心参数

Producer核心参数:

metadata.max.age.ms 默认每隔5分钟 会刷新下元数据

max.request.size 每个请求的最大大小(1mb)

buffer.memory 缓冲区的内存大小(32mb)

max.block.ms 缓冲区填满之后或元数据拉取最大阻塞时间(60s)

request.timeout.ms 请求超时时间(30s)

batch.size 每个batch的大小默认(16kb)

linger.ms 默认为0,不延迟发送。

可以配置为10ms,10ms内还没有凑成1个batch发送出去,必须立即发送出去

Partitioner.class:

分区策略,用于控制消息被发送到topic的哪个分区。如果要实现自定义的分区策略,创建自己的类,并实现o.a.k.clients.producer.Partitioner接口

默认的DefaultPartitioner对于没有key的消息使用轮询

Kafka入门三-Consumer核心参数

Consumer端的参数基本上是通过在consumer代码中进行指定,通常形式为

Properties props = new Properties();
props.put(key, value)

{key/value}.serializer

用于为{key/value}做序列化,任何消息的key和value都会依据该参数制定的类转换成字节数组用于后续的发送

推荐配置

常见的是o.a.k.common.serialization.StringSerializer,即将字符串转换成字节数组。

group.id

组id,唯一标识一个消费组consumer group

推荐配置

如果使用Kafka提供的自动组管理功能的话(也就是调用KafkaConsumer#subscribe),那么需要确定一个不重复的组id

session.timeout.ms

自动组管理下用于检测consumer失效failure的时间。

推荐配置

默认值10s是一个很好的起始值。如果要缩短错误检测时间,可适当减少该值。

auto.offset.reset

earliest, latest, 生产环境常用latest

enable.auto.commit

是否让Kafka在后台自动提交位移。

推荐配置

如果有比较强的”exactly-once“消费需求,通常要设置该参数为false,然后在程序中自己控制位移提交。其他情况下,设置成true即可。

heartbeat.interval.ms

与session.timeout.ms一样,也是一个用于影响rebalance行为的参数。该参数用于控制consumer发送心跳请求的频率。同时它也被用作consumer感知rebalance发生的手段,因此如果设置比较低的值,consumer通常都能更快的进行rebalance

推荐配置

如果consumer group中成员很多的话,推荐将此值设置大一点,但最好不要超过session.timeout.ms的1/3

max.poll.interval.ms

用于调节消费主线程的消费速度,该参数是0.10版本加的,主要是解决之前提到的session.timeout.ms多重含义重合的问题。该参数明确表示“消息处理超时”。比如如果你poll回来的消息需要1分钟进行处理,那么你就需要将该参数设置成1分钟。

推荐配置

需要结合具体的性能目标和实际场景进行设置。如果处理消息时需要调用外部系统服务,默认的30s通常都无法满足需求,可以考虑适当增加该值。

max.poll.records

控制单次poll回来的消息数。

推荐配置

需要结合具体的性能目标和实际场景进行设置。如果consumer group经常性地rebalance,通常头可以减少此值以使得consumer可以在max.poll.interval.ms时间内处理完所有消息。

Kafka入门四-Producer介绍

Kafka入门五-消费者与消费者组

查看kafka的消费者组列表

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list test-consumer-group

查看消费者组的成员信息

> bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group
 
TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                    HOST            CLIENT-ID
topic3          0          241019          395308          154289          consumer2-5d30 /127.0.0.1      consumer2
topic2          1          520678          803288          282610          consumer2-5d30 /127.0.0.1      consumer2
topic3          1          241018          398817          157799          consumer2-5d30 /127.0.0.1      consumer2
topic1          0          854144          855809          1665            consumer1-581a /127.0.0.1      consumer1
topic2          0          460537          803290          342753          consumer1-581a /127.0.0.1      consumer1
topic3          2          243655          398812          155157          consumer4-c6c1 /127.0.0.1      consumer4