kafka学习
笔记
- 消费者是消费者群组的一部分,也就是说,会有一个或多个消费者共同读取一个主题。群 组保证每个分区只能被一个消费者使用
- 一个分区从属于一个 broker,该 broker 被称为分区的首领。一个分区 可以分配给多个 broker,这个时候会发生分区复制。这种复制机制为分区提供了消息冗余,如果有一个 broker 失效,其他 broker 可以接管领导权。
- 为了能让分区分布到所有 broker 上,主题分区的个数必须要大于 broker 的个数。拥有大量消息的主题如果要进行负载分散,就需要 大量的分区。
- 日志过期时间= 时间保留数据值 + 日志片段存满的时间
- 对于使用时间 戳获取偏移量的操作来说,日志片段越小,结果越准确。
快速开始
-
linux环境下安装zookeeper、kafka、jdk1.8
-
启动zookper、kafka
-
创建topic:myTopic
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic myTopic
4.生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic myTopic
5.消费者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic myTopic --from-beginning
6.运行截图
硬件的选择
垃圾回收机制
G1 垃圾回收器
- MaxGCPauseMillis: 该参数指定每次垃圾回收默认的停顿时间。该值不是固定的,G1 可以根据需要使用更 长的时间。它的默认值是 200ms。也就是说,G1 会决定垃圾回收的频率以及每一轮需 要回收多少个区域,这样算下来,每一轮垃圾回收大概需要 200ms 的时间。
- InitiatingHeapOccupancyPercent: 该参数指定了在 G1 启动新一轮垃圾回收之前可以使用的堆内存百分比,默认值是 45。 也就是说,在堆内存的使用率达到 45% 之前,G1 不会启动垃圾回收。这个百分比包括 新生代和老年代的内存。
数据中心布局
放在不同的服务器
创建Kafka生产者
属性 | 作用 |
---|---|
bootstrap.servers | 指定 broker 的地址清单,地址的格式为 host:port清单里不需要包含所有的 broker 地址,生产者会从给定的 broker 里查找到其他 broker 的信息。不过建议至少要 提供两个 broker 的信息,一旦其中一个宕机,生产者仍然能够连接到集群上。 |
key.serializer | broker 希望接收到的消息的键和值都是字节数组。生产者接口允许使用参数化类型,因此可以把 Java 对象作为键和值发送给 broker。key.serializer 必须被设置为一 个实现了 org.apache.kafka.common.serialization.Serializer 接口的类,生产者会使 用这个类把键对象序列化成字节数组。 |
value.serializer | 与 key.serializer 一样,value.serializer 指定的类会将值序列化。如果键和值都是字 符串,可以使用与 key.serializer 一样的序列化器。如果键是整数类型而值是字符串, 那么需要使用不同的序列化器。 |