生产者

acks

1代表leader接收到并确认。-1和all代表ISR列表里至少min.insync.replicas数副本同步了数据才返回成功。

一般情况下,因为生产者会自动进行重试,所以就没必要在代码逻辑里处理那些可重试的错误。 只需要处理那些不可重试的错误(比如“消息太大”错误或重试次数超出上限的情况。

分区方式自定义

实现Partitioner接口可自定义分区方式,使指定Key独享某个分区。防止某分区Record过多。

消费者

消费者组

自动平衡
ZK不适合频繁读写,所以位移不再保存到ZK。
消费者数量超过主题分区的数量,多余的消费者只会被闲置。
线程安全问题:最好一个消费者有且只有一个线程,多线程共享一个消费者不安全。

消费者配置参数注意事项

max.partition.fetch.bytes的值必须比 broker 能够接收的最大消息的字节数(通过 max.message.size属性配置)大, 则消费者可能无法读取这些消息,导致消费者一直挂起重试。
消费者需要频繁调用 poll() 方法来避免会话过期和发生分区再均衡,如果单次调用 poll() 返回的数据太多,消费者需要更多的时间处理,可能无法及时进行下个轮询来避免会话过期。如果出现这种情况可以把max.partition.fetch.bytes 值改小,或者延长会话过期时间。
heartbeat.interval.ms 必须比 session.timeout.ms小, 一般是session.timeout.ms 三分之一 。
自动commit offset在再平衡(reblance)时会出现重复消费。

消费者

不同于传统的消息系统,横向伸缩 Kafka 消费者和消费者群组并不会对性能造成负面影响。
在再均衡期间,消费者无法读取消息,造成整个群组一小段时间的不可用。
Kafka 内置了两种分配策略。分配 完毕之后,群主把分配情况列表发送给群组协调器,协调器再把这些信息发 送给所有消费者。每个消费者只能看到自己的分配信息,只有群主知道群组 里所有消费者的分配信息。这个过程会在每次再均衡时重复发生。

命令行

查看LogSize

  1. kfka2.0
  2. kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group wuren_foo --describe

Kafka CLI Kerberos测试

  1. export KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka/jaas.conf"
  2. kafka-console-producer --broker-list eng-cdh1:9092 --topic test --producer.config client.properties

jaas.conf

  1. KafkaClient {
  2. com.sun.security.auth.module.Krb5LoginModule required
  3. useKeyTab=true
  4. keyTab="/var/run/cloudera-scm-agent/process/464-kafka-KAFKA_BROKER/kafka.keytab"
  5. principal="kafka/eng-cdh1@DTSTACK.COM";
  6. };

client.properties

  1. security.protocol=SASL_PLAINTEXT
  2. sasl.kerberos.service.name=kafka