原文檔地址:http://kafka.apache.org/documentation.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
#############################
System #############################
#唯一標識在集羣中的ID,要求是正數。
broker.id=0
#服務端口,默認9092
port=9092
#監聽地址,不設爲所有地址
host.name=debugo01
#
處理網絡請求的最大線程數
num.network.threads=2
#
處理磁盤I/O的線程數
num.io.threads=8
#
一些後臺線程數
background.threads
=
4
#
等待IO線程處理的請求隊列最大數
queued.max.requests
=
500
# socket的發送緩衝區(SO_SNDBUF)
socket.send.buffer.bytes=1048576
#
socket的接收緩衝區 (SO_RCVBUF)
socket.receive.buffer.bytes=1048576
#
socket請求的最大字節數。爲了防止內存溢出,message.max.bytes必然要小於
socket.request.max.bytes
=
104857600
#############################
Topic #############################
#
每個topic的分區個數,更多的partition會產生更多的segment file
num.partitions=2
#
是否允許自動創建topic ,若是false,就需要通過命令創建topic
auto.create.topics.enable
=true
#
一個topic ,默認分區的replication個數 ,不能大於集羣中broker的個數。
default.replication.factor
=1
#
消息體的最大大小,單位是字節
message.max.bytes
=
1000000
#############################
ZooKeeper #############################
#
Zookeeper quorum設置。如果有多個使用逗號分割
zookeeper.connect=debugo01:2181,debugo02,debugo03
#
連接zk的超時時間
zookeeper.connection.timeout.ms=1000000
#
ZooKeeper集羣中leader和follower之間的同步實際
zookeeper.sync.time.ms
=
2000
#############################
Log #############################
#日誌存放目錄,多個目錄使用逗號分割
log.dirs=/var/log/kafka
#
當達到下面的消息數量時,會將數據flush到日誌文件中。默認10000
#log.flush.interval.messages=10000
#
當達到下面的時間(ms)時,執行一次強制的flush操作。interval.ms和interval.messages無論哪個達到,都會flush。默認3000ms
#log.flush.interval.ms=1000
#
檢查是否需要將日誌flush的時間間隔
log.flush.scheduler.interval.ms
=
3000
#
日誌清理策略(delete|compact)
log.cleanup.policy
=
delete
#
日誌保存時間 (hours|minutes),默認爲7天(168小時)。超過這個時間會根據policy處理數據。bytes和minutes無論哪個先達到都會觸發。
log.retention.hours=168
#
日誌數據存儲的最大字節數。超過這個時間會根據policy處理數據。
#log.retention.bytes=1073741824
#
控制日誌segment文件的大小,超出該大小則追加到一個新的日誌segment文件中(-1表示沒有限制)
log.segment.bytes=536870912
#
當達到下面時間,會強制新建一個segment
log.roll.hours
=
24*7
#
日誌片段文件的檢查週期,查看它們是否達到了刪除策略的設置(log.retention.hours或log.retention.bytes)
log.retention.check.interval.ms=60000
#
是否開啓壓縮
log.cleaner.enable=false
#
對於壓縮的日誌保留的最長時間
log.cleaner.delete.retention.ms
=
1
day
#
對於segment日誌的索引文件大小限制
log.index.size.max.bytes
=
10
*
1024
*
1024
#y索引計算的一個緩衝區,一般不需要設置。
log.index.interval.bytes
=
4096
#############################
replica #############################
#
partition management controller 與replicas之間通訊的超時時間
controller.socket.timeout.ms
=
30000
#
controller-to-broker-channels消息隊列的尺寸大小
controller.message.queue.size=10
#
replicas響應leader的最長等待時間,若是超過這個時間,就將replicas排除在管理之外
replica.lag.time.max.ms
=
10000
#
是否允許控制器關閉broker ,若是設置爲true,會關閉所有在這個broker上的leader,並轉移到其他broker
controlled.shutdown.enable
=
false
#
控制器關閉的嘗試次數
controlled.shutdown.max.retries
=
3
#
每次關閉嘗試的時間間隔
controlled.shutdown.retry.backoff.ms
=
5000
#
如果relicas落後太多,將會認爲此partition relicas已經失效。而一般情況下,因爲網絡延遲等原因,總會導致replicas中消息同步滯後。如果消息嚴重滯後,leader將認爲此relicas網絡延遲較大或者消息吞吐能力有限。在broker數量較少,或者網絡不足的環境中,建議提高此值.
replica.lag.max.messages
=
4000
#leader與relicas的socket超時時間
replica.socket.timeout.ms=
30
*
1000
#
leader複製的socket緩存大小
replica.socket.receive.buffer.bytes=64
*
1024
#
replicas每次獲取數據的最大字節數
replica.fetch.max.bytes
=
1024
*
1024
#
replicas同leader之間通信的最大等待時間,失敗了會重試
replica.fetch.wait.max.ms
=
500
#
每一個fetch操作的最小數據尺寸,如果leader中尚未同步的數據不足此值,將會等待直到數據達到這個大小
replica.fetch.min.bytes
=1
#
leader中進行復制的線程數,增大這個數值會增加relipca的IO
num.replica.fetchers
=
1
#
每個replica將最高水位進行flush的時間間隔
replica.high.watermark.checkpoint.interval.ms
=
5000
#
是否自動平衡broker之間的分配策略
auto.leader.rebalance.enable
=
false
#
leader的不平衡比例,若是超過這個數值,會對分區進行重新的平衡
leader.imbalance.per.broker.percentage
=
10
#
檢查leader是否不平衡的時間間隔
leader.imbalance.check.interval.seconds
=
300
#
客戶端保留offset信息的最大空間大小
offset.metadata.max.bytes
=
1024
#############################Consumer
#############################
#
Consumer端核心的配置是group.id、zookeeper.connect
#
決定該Consumer歸屬的唯一組ID,By setting the same group id multiple processes indicate that they are all part of the same consumer group.
group.id
#
消費者的ID,若是沒有設置的話,會自增
consumer.id
#
一個用於跟蹤調查的ID ,最好同group.id相同
client.id
=
<group_id>
#
對於zookeeper集羣的指定,必須和broker使用同樣的zk配置
zookeeper.connect=debugo01:2182,debugo02:2182,debugo03:2182
#
zookeeper的心跳超時時間,查過這個時間就認爲是無效的消費者
zookeeper.session.timeout.ms
=
6000
#
zookeeper的等待連接時間
zookeeper.connection.timeout.ms
=
6000
#
zookeeper的follower同leader的同步時間
zookeeper.sync.time.ms
=
2000
#
當zookeeper中沒有初始的offset時,或者超出offset上限時的處理方式 。
#
smallest :重置爲最小值
#
largest:重置爲最大值
#
anything else:拋出異常給consumer
auto.offset.reset
=
largest
#
socket的超時時間,實際的超時時間爲max.fetch.wait + socket.timeout.ms.
socket.timeout.ms=
30
*
1000
#
socket的接收緩存空間大小
socket.receive.buffer.bytes=64
*
1024
#從每個分區fetch的消息大小限制
fetch.message.max.bytes
=
1024
*
1024
#
true時,Consumer會在消費消息後將offset同步到zookeeper,這樣當Consumer失敗後,新的consumer就能從zookeeper獲取最新的offset
auto.commit.enable
=
true
#
自動提交的時間間隔
auto.commit.interval.ms
=
60
*
1000
#
用於消費的最大數量的消息塊緩衝大小,每個塊可以等同於fetch.message.max.bytes中數值
queued.max.message.chunks
=
10
#
當有新的consumer加入到group時,將嘗試reblance,將partitions的消費端遷移到新的consumer中, 該設置是嘗試的次數
rebalance.max.retries
=
4
#
每次reblance的時間間隔
rebalance.backoff.ms
=
2000
#
每次重新選舉leader的時間
refresh.leader.backoff.ms
#
server發送到消費端的最小數據,若是不滿足這個數值則會等待直到滿足指定大小。默認爲1表示立即接收。
fetch.min.bytes
=
1
#
若是不滿足fetch.min.bytes時,等待消費端請求的最長等待時間
fetch.wait.max.ms
=
100
#
如果指定時間內沒有新消息可用於消費,就拋出異常,默認-1表示不受限
consumer.timeout.ms
=
-1
#############################Producer#############################
#
核心的配置包括:
#
metadata.broker.list
#
request.required.acks
#
producer.type
#
serializer.class
#
消費者獲取消息元信息(topics, partitions and replicas)的地址,配置格式是:host1:port1,host2:port2,也可以在外面設置一個vip
metadata.broker.list
#消息的確認模式
#
0:不保證消息的到達確認,只管發送,低延遲但是會出現消息的丟失,在某個server失敗的情況下,有點像TCP
#
1:發送消息,並會等待leader 收到確認後,一定的可靠性
#
-1:發送消息,等待leader收到確認,並進行復制操作後,才返回,最高的可靠性
request.required.acks
=
0
#
消息發送的最長等待時間
request.timeout.ms
=
10000
#
socket的緩存大小
send.buffer.bytes=100*1024
#
key的序列化方式,若是沒有設置,同serializer.class
key.serializer.class
#
分區的策略,默認是取模
partitioner.class=kafka.producer.DefaultPartitioner
#
消息的壓縮模式,默認是none,可以有gzip和snappy
compression.codec
=
none
#
可以針對默寫特定的topic進行壓縮
compressed.topics=null
#
消息發送失敗後的重試次數
message.send.max.retries
=
3
#
每次失敗後的間隔時間
retry.backoff.ms
=
100
#
生產者定時更新topic元信息的時間間隔 ,若是設置爲0,那麼會在每個消息發送後都去更新數據
topic.metadata.refresh.interval.ms
=
600
*
1000
#
用戶隨意指定,但是不能重複,主要用於跟蹤記錄消息
client.id=""
#
異步模式下緩衝數據的最大時間。例如設置爲100則會集合100ms內的消息後發送,這樣會提高吞吐量,但是會增加消息發送的延時
queue.buffering.max.ms
=
5000
#
異步模式下緩衝的最大消息數,同上
queue.buffering.max.messages
=
10000
#
異步模式下,消息進入隊列的等待時間。若是設置爲0,則消息不等待,如果進入不了隊列,則直接被拋棄
queue.enqueue.timeout.ms
=
-1
#
異步模式下,每次發送的消息數,當queue.buffering.max.messages或queue.buffering.max.ms滿足條件之一時producer會觸發發送。
batch.num.messages=200
|