1、配置
参考:http://kafka.apache.org/22/documentation.html#configuration
1.1 broker配置
- broker.id
默认值是0,这个值在整个 Kafka 集群里必须是唯一的
2. port
如果使用配置样本来启动 Kafka,它会监听 9092 端口
3. zookeeper.connect
用于保存 broker 元数据的 Zookeeper 地址是通过 zookeeper.connect 来指定的。
localhost:2181 表示这个 Zookeeper 是运行在本地的 2181 端口上
4. log .dirs
Kafka 把所有消息都保存在磁盘上,存放这些日志片段的目录是通过 log. dirs 指定的
5. num.recovery .threads.per . data.dir(每个data.dir的恢复线程数)
每个日志目录只使用一个线程。因为这些线程只是在服务器启动和关闭时会
用到,所以完全可以设置大量的线程来达到井行操作的目的如果num.recovery .threads.per . data.dir被设为8,并且 log.dir 指定了 3 个路径,那么总
共需要 24 个线程。
6. auto.create .topics.enable
默认情况下, Kafka 会在如下几种情形下自动创建主题 :
. 当一个生产者开始往主题写入消息时 3
• 当一个消费者开始从主题读取消息时 g
• 当任意一个客户端向主题发送元数据请求时。
很多时候,这些行为都是非预期的
1.2 主题配置
- num.paritions
指定了新创建的主题将包含多少个分区
2. log.retention.ms
Kafka 通常根据时间来决定数据可以被保留多久。默认使用 log. retention.hours参数来配置时间 ,默认值为 168 小时
3. log.retention.bytes
另 一 种方式是通过保留的消息字节数来判断消息是否过期
4. log.segment.bytes
当日志片段大小达到 log.segl'lent . bytes 指定的上限(默认是 1GB )时,当前日志片段就会被关闭,一个新的日志片段被打开
5. log.segment.ms
另 一个可以控制日志片段关闭时间的参数是log.segment.ms时,它指定了多长时间之后日志片段会被关闭。就像log.retention.bytes和log.retention.ms这两个参数一样,log.segment.bytes和log.retention.ms这两个参数之间也不存在互斥问题。日志片段会在大小或时间达到上限时被关闭,就看哪个条件先得到满足。默认情况下 ,log.segment.ms 没
有设定值,所以只根据大小来关闭日志片段
6. message.max.bytes
broker 通过设置message.max.bytes参数来限制单个消息的大小,默认值是 l 000 000 ,也就是1MB
1.3 生产者配置
1.3.1 基础配置(必须)
- bootsrap.servers
指定 broker 的地址清单
2. key.serializer和value. serializer:broker希望接收到的消息的键和值都是字节数组,所以需要对key和value进行序列化。
1.3.2 其他配置
- acks
acks指定了必须要有多少个分区副本收到消息,生产者才会认为消息写入是成功的。如果 acks=0 ,生产者在成功写入悄息之前不会等待任何来自服务器的响应。如果 acks=1,只要集群的Leader节点收到消息,生产者就会收到一个来自服务器的成功响应如果 acks=all,只有当所有参与复制的节点全部收到消息时
2. buffer.memory
该参数用来设置生产者内存缓冲区的大小,生产者用它缓冲要发送到服务器的消息。如果应用程序发送消息的速度超过发送到服务器的速度,会导致生产者空间不足。这个时候,send方法调用要么被阻塞,要么抛出异常
3. compression .type
默认情况下,消息发送时不会被压缩。该参数可以设置为 snappy 、 gzi.p 或 lz4 ,它指定了消息被发送给 broker 之前使用哪一种压缩算也进行压缩。
4. retries
retries 参数的值决定了生产者可以重发消息的次数,如果达到这个次数,生产者会放弃重试并返回错民。默认情况下,生产者会在每次重试之间等待 l00ms ,不过可以通过retry.backoff.ms 参数来改变这个时间间隔
5. batch.size
当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算(而不是消息个数)。当批次被填满,批次里的所有消息会被发送出去
6. linger.ms
该参数指定了生产者在发送批次之前等待更多消息加入批次的时间。KafkaProducer会在批次填满或linger.ms 达到上限时把批次发送出去。默认情况下,只要有可用的线程, 生产者就会把消息发送出去,就算批次里只有一个消息
7. client.id
该参数可以是任意的字符串,服务器会用它来识别消息的来源
8. max.in.flight.requests.per.connection
该参数指定了生产者在收到服务器晌应之前可以发送多少个消息
9. timeout.ms、request.timeout.ms和 metadata.fetch.timeout.ms
request.timeout.ms指定了生产者在发送数据时等待服务器返回响应的时间,
metadata.fetch.timeout.ms:指定了生产者在获取元数据(比如目标分区的Leader是谁)时等待服务器返回响应的时间。
timeout.ms:指定了 broker 等待同步副本返回消息确认的时间
10. max.block.ms
该参数指定了在调用 send 方法或使用 partitionsFor方法获取元数据时生产者的阻塞时间
11. max.request.size
该参数用于控制生产者发送的请求大小。它可以指能发送的单个消息的最大值,也可以指单个请求里所有消息总的大小
12. receive.buffer.bytes和send.buffer.bytes
这两个参数分别指定了 TCP socket 接收和发送数据包的缓冲区大小。
1.4 消费者配置
1.4.1 基础配置(必须)
- bootsrap.servers
指定 broker 的地址清单
2. key.serializer和value. serializer:broker希望接收到的消息的键和值都是字节数组,所以需要对key和value进行序列化。
1.4.2 其他配置
- groupid:消费者组ID。groupid相同的消费者在同一个组。
- fetch.min.bytes
该属性指定了消费者从服务器获取记录的最小字节数。
3. fetch.max.wait.ms
我们通过fetch.min.bytes告诉 Kafka,等到有足够的数据时才把它返回给消费者。而fetch.max.wait.ms则用于指定 broker 的等待时间,默认是 5 00ms。如果fetch.max.wait.ms被设为100ms,并且fetch.min.bytes被设为1MB,那么 Kafka 在收到消费者的请求后,要么返回1MB 数据,要么在 lOOms 后返回所有可用的数据,就看哪个条件先得到满足。
4. max . partition .fetch. bytes
该属性指定了服务器从每个分区里返回给消费者的最大字节数。它的默认值是 1MB
5. session.timeout.ms
该属性指定了消费者在被认为死亡之前可以与服务器断开连接的时间,默认是 3s
6. auto.offset.reset
该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下(因消费者长时间失效,包含偏移量的记录已经过时井被删除)该作何处理
7. enable.auto.commit
该属性指定了消费者是否自动提交偏移量,默认值是true
8. partition.assignment.strategy
PartitionAssignor根据给定的消费者和主题,决定哪些分区应该被分配给哪个消费者。Kafka 有两个默认的分配策略
Range:
下面的例子是假设为消费者数为2,分区为3,那C1会获取前2个分区,而C2也
想获取两个分区,但是分区数不够,只能获得一个分区
RoundRobin
该策略把主题的所有分区逐个分配给消费者,继续上面例子,C1会分到第一个和最
后一个分区,而C2会获得第二个分区
9. client.id
该属性可以是任意字符串 , broker 用它来标识从客户端发送过来的消息,通常被用在日志、度量指标和配额里。
10. max.poll.records
该属性用于控制单次调用 call方提交法能够返回的记录数量
11. receive.buffer.bytes 和 send.buffer.bytes
socket 在读写数据时用到的 TCP 缓冲区也可以设置大小。如果它们被设为- 1 ,就使用操作系统的默认值
2、AVRO序列化
2.1 使用AVRO序列化
Avro 数据通过与语言无关 的 schema 来定义 。schema 通过 JSON 来描述,数据被序列化成二进制文件或 JSON 文件,不过一般会使用二进制文件。
Avro 有一个很有意思的特性是,当负责写消息的应用程序使用了新的 schema ,负责读消息的应用程序可以继续处理消息而无需做任何改动
示例:后面补上。
3、安全
主要介绍怎么安全地连接broker,如使用SSL进行连接。
参考:http://kafka.apache.org/22/documentation.html#security
4、参考
kafka权威指南
官方文档:http://kafka.apache.org/22/documentation.html