-
Notifications
You must be signed in to change notification settings - Fork 5
/
index.html
763 lines (597 loc) · 42.3 KB
/
index.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
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
<!DOCTYPE html>
<html lang="en">
<head><script src="/livereload.js?port=1313&mindelay=10&v=2" data-no-instant defer></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>rmoff's random ramblings</title>
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://localhost:1313/index.xml">
<link rel="canonical" href="http://localhost:1313/">
<meta name="generator" content="Hugo 0.75.1" />
<link rel="stylesheet" href="http://localhost:1313/css/tachyons.min.css" />
<link rel="stylesheet" href="http://localhost:1313/css/story.css" />
<link rel="stylesheet" href="http://localhost:1313/css/descartes.css" />
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Quattrocento+Sans:400,400i,700,700i|Quattrocento:400,700|Spectral:400,400i,700,700i&subset=latin-ext" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://localhost:1313/js/story.js"></script>
</head>
<body class="ma0 bg-white page-kind-home is-page-false ">
<header class="cover bg-top" style="background-image: url('http://localhost:1313/img/default-header-img.jpg'); background-position: center;">
<div class="bg-black-30 bb bt">
<nav class="hide-print sans-serif border-box pa3 ph5-l">
<a href="http://localhost:1313/" title="Home">
<img src="http://localhost:1313/img/logo.jpg" class="w2 h2 br-100" alt="rmoff's random ramblings" />
</a>
<div class="fr h2 pv2 tr">
<a class="link f5 ml2 dim near-white" href="/about-me/">about</a>
<a class="link f5 ml2 dim near-white" href="https://talks.rmoff.net">talks</a>
<a class="link f5 ml2 dim near-white" href="https://www.youtube.com/c/rmoff"><i class="fab fa-youtube-square"></i></a>
<a class="link f5 ml2 dim near-white" href="https://twitter.com/rmoff/"><i class="fab fa-twitter-square"></i></a>
<a class="link f5 ml2 dim near-white" href="https://github.com/rmoff/"><i class="fab fa-github-square"></i></a>
<a class="link f5 ml2 dim near-white" href="https://www.linkedin.com/in/robinmoffatt/"><i class="fab fa-linkedin"></i></a>
<a class="link f5 ml2 dim near-white fas fa-rss-square" href="http://localhost:1313/index.xml" title="RSS Feed"></a>
<a class="link f5 ml2 dim near-white fas fa-search" href="http://localhost:1313/search/" role="search" title="Search"></a>
</div>
</nav>
<div id="hdr" class="tc-l pv4-ns pv5-l pv2 ph3 ph4-ns">
<h1 class="near-white mt1-ns f2 fw3 mb0 mt0 lh-title">rmoff’s random ramblings</h1>
<h2 class="near-white mt3-l mb4-l fw1 f6 f3-l measure-wide-l center lh-copy mt2 mb3">
✨ Kafka, ksqlDB, and other random geekery 🤓
</h2>
</div>
</div>
</header>
<main role="main">
<div class="pa3 pa4-ns w-100 w-70-ns center">
<section class="w-100 mw8">
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6838.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/23/a-collection-of-kafka-related-talks/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 23, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/23/a-collection-of-kafka-related-talks/" class="color-inherit dim link">📌 🎁 A collection of Kafka-related talks 💝</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>Here’s a collection of Kafka-related talks, <em>just for you.</em></p>
</div>
<div class="paragraph">
<p>Each one has 🍿🎥 a recording, 📔 slides, and 👾 code to go and try out. </p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/23/a-collection-of-kafka-related-talks/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/10/IMG_6942.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/10/05/streaming-xml-messages-from-ibm-mq-into-kafka-into-mongodb/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Oct 5, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/10/05/streaming-xml-messages-from-ibm-mq-into-kafka-into-mongodb/" class="color-inherit dim link">Streaming XML messages from IBM MQ into Kafka into MongoDB</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>Let’s imagine we have XML data on a queue in IBM MQ, and we want to ingest it into Kafka to then use downstream, perhaps in an application or maybe to stream to a NoSQL store like MongoDB.</p>
</div>
<div class="admonitionblock note">
<table>
<tbody><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
This same pattern for ingesting bytes and applying a schema will work with other connectors such as <a href="https://www.confluent.io/hub/confluentinc/kafka-connect-jms">JMS</a> and <a href="https://www.confluent.io/hub/confluentinc/kafka-connect-activemq">ActiveMQ</a>.
</td>
</tr>
</tbody></table>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/10/05/streaming-xml-messages-from-ibm-mq-into-kafka-into-mongodb/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6861.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-3-kafka-connect-filepulse-connector/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Oct 1, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-3-kafka-connect-filepulse-connector/" class="color-inherit dim link">Ingesting XML data into Kafka - Option 3: Kafka Connect FilePulse connector</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>👉 <em><a href="/2020/10/01/ingesting-xml-data-into-kafka/">Ingesting XML data into Kafka - Introduction</a></em></p>
</div>
<div class="paragraph">
<p>We saw in the <a href="/2020/10/01/ingesting-xml-data-into-kafka-option-1-the-dirty-hack/">first post</a> how to hack together an ingestion pipeline for XML into Kafka using a source such as <code>curl</code> piped through <code>xq</code> to wrangle the XML and stream it into Kafka using <code>kafkacat</code>, optionally using ksqlDB to apply and register a schema for it.</p>
</div>
<div class="paragraph">
<p>The <a href="/2020/10/01/ingesting-xml-data-into-kafka-option-2-kafka-connect-plus-single-message-transform/">second one</a> showed the use of any Kafka Connect source connector plus the <code>kafka-connect-transform-xml</code> Single Message Transformation. Now we’re going to take a look at a source connector from the community that can also be used to ingest XML data into Kafka.</p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-3-kafka-connect-filepulse-connector/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6861.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-2-kafka-connect-plus-single-message-transform/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Oct 1, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-2-kafka-connect-plus-single-message-transform/" class="color-inherit dim link">Ingesting XML data into Kafka - Option 2: Kafka Connect plus Single Message Transform</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>We previously looked at the background to <a href="/2020/10/01/ingesting-xml-data-into-kafka-introduction/">getting XML into Kafka</a>, and potentially <a href="/2020/10/01/ingesting-xml-data-into-kafka-option-1-the-dirty-hack/">how [not] to do it</a>. Now let’s look at the <em>proper</em> way to build a streaming ingestion pipeline for XML into Kafka, using Kafka Connect.</p>
</div>
<div class="paragraph">
<p>If you’re unfamiliar with Kafka Connect, check out this <a href="https://rmoff.dev/what-is-kafka-connect">quick intro to Kafka Connect here</a>. Kafka Connect’s excellent plugable architecture means that we can pair any <strong>source connector</strong> to read XML from wherever we have it (for example, a flat file, or a MQ, or anywhere else), with a <strong>Single Message Transform</strong> to transform the XML into a payload with a schema, and finally a <strong>converter</strong> to serialise the data in a form that we would like to use such as Avro or Protobuf.</p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-2-kafka-connect-plus-single-message-transform/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6861.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-1-the-dirty-hack/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Oct 1, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-1-the-dirty-hack/" class="color-inherit dim link">Ingesting XML data into Kafka - Option 1: The Dirty Hack</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p><em>👉 <a href="/2020/10/01/ingesting-xml-data-into-kafka/">Ingesting XML data into Kafka - Introduction</a></em></p>
</div>
<div class="paragraph">
<p><strong>What would a blog post on <code>rmoff.net</code> be if it didn’t include the dirty hack option? 😁</strong></p>
</div>
<div class="paragraph">
<p><em>The secret to dirty hacks is that they are often rather effective and when needs must, they can suffice. If you’re prototyping and need to <a href="https://www.urbandictionary.com/define.php?term=JFDI"><strong>JFDI</strong></a>, a dirty hack is just fine. If you’re looking for code to run in Production, then a dirty hack probably is not fine.</em></p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-option-1-the-dirty-hack/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6861.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-introduction/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Oct 1, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-introduction/" class="color-inherit dim link">Ingesting XML data into Kafka - Introduction</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
XML has been around for 20+ years, and whilst other ways of serialising our data have gained popularity in more recent times (such as JSON, Avro, and Protobuf), XML is not going away soon. Part of that is down to technical reasons (clearly defined and documented schemas), and part of it is simply down to enterprise inertia - having adopted XML for systems in the last couple of decades, they’re not going to be changing now just for some short-term fad.
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/10/01/ingesting-xml-data-into-kafka-introduction/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/img/default-header-img.tn-500x500.jpg'); background-position: center;">
<a href="http://localhost:1313/2020/10/01/abcde-error-trying-to-calculate-disc-ids-without-lead-out-information/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Oct 1, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/10/01/abcde-error-trying-to-calculate-disc-ids-without-lead-out-information/" class="color-inherit dim link"><code>abcde</code> - Error trying to calculate disc ids without lead-out information</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>Short & sweet to help out future Googlers. Trying to use <code>abcde</code> I got the error:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-bash" data-lang="bash">[WARNING] something went wrong while querying the CD... Maybe a DATA CD or the CD is not loaded?
[WARNING] Error trying to calculate disc ids without lead-out information.</code></pre>
</div>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/10/01/abcde-error-trying-to-calculate-disc-ids-without-lead-out-information/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/img/default-header-img.tn-500x500.jpg'); background-position: center;">
<a href="http://localhost:1313/2020/10/01/ibm-mq-on-docker-channel-was-blocked/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Oct 1, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/10/01/ibm-mq-on-docker-channel-was-blocked/" class="color-inherit dim link">IBM MQ on Docker - Channel was blocked</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>Running IBM MQ in a Docker container and the client connecting to it was throwing repeated <code>Channel was blocked</code> errors.</p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/10/01/ibm-mq-on-docker-channel-was-blocked/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6880.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/30/setting-key-value-when-piping-from-jq-to-kafkacat/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 30, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/30/setting-key-value-when-piping-from-jq-to-kafkacat/" class="color-inherit dim link">Setting key value when piping from <code>jq</code> to <code>kafkacat</code></a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>One of my favourite hacks for getting data into Kafka is using kafkacat and <code>stdin</code>, often from <code>jq</code>. You can see this in action with <a href="/2020/03/11/streaming-wi-fi-trace-data-from-raspberry-pi-to-apache-kafka-with-confluent-cloud/">Wi-Fi data</a>, <a href="/2020/01/21/monitoring-sonos-with-ksqldb-influxdb-and-grafana/">IoT data</a>, and data from a <a href="/2018/05/10/quick-n-easy-population-of-realistic-test-data-into-kafka/">REST endpoint</a>. This is fine for getting values into a Kafka message - but Kafka messages are <strong>key</strong>/value, and being able to specify a key is can often be important.</p>
</div>
<div class="paragraph">
<p>Here’s a way to do that, using a separator and some <code>jq</code> magic. Note that at the moment <a href="https://github.com/edenhill/kafkacat/issues/140">kafkacat only supports single byte separator characters</a>, so you need to choose carefully. If you pick a separator that also appears in your data, it’s possibly going to have unintended consequences.</p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/30/setting-key-value-when-piping-from-jq-to-kafkacat/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6861.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/25/some-of-my-favourite-public-data-sets/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 25, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/25/some-of-my-favourite-public-data-sets/" class="color-inherit dim link">Some of my favourite public data sets</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>Readers of a certain age and RDBMS background will probably remember <code>northwind</code>, or <code>HR</code>, or <code>OE</code> databases - or quite possibly not just remember them but still be using them. Hardcoded sample data is fine, and it’s great for repeatable tutorials and examples - but it’s boring as heck if you want to build an example with something that isn’t using the same data set for the 100th time.</p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/25/some-of-my-favourite-public-data-sets/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6723.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/18/using-the-debezium-ms-sql-connector-with-ksqldb-embedded-kafka-connect/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 18, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/18/using-the-debezium-ms-sql-connector-with-ksqldb-embedded-kafka-connect/" class="color-inherit dim link">Using the Debezium MS SQL connector with ksqlDB embedded Kafka Connect</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
Prompted by a question on StackOverflow I thought I’d take a quick look at setting up ksqlDB to ingest CDC events from Microsoft SQL Server using Debezium. Some of this is based on my previous article, Streaming data from SQL Server to Kafka to Snowflake ❄️ with Kafka Connect.
Setting up the Docker Compose I like standalone, repeatable, demo code. For that reason I love using Docker Compose and I embed everything in there - connector installation, the kitchen sink - the works.
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/18/using-the-debezium-ms-sql-connector-with-ksqldb-embedded-kafka-connect/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6725.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/18/including-content-from-external-links-with-asciidoc-in-hugo/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 18, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/18/including-content-from-external-links-with-asciidoc-in-hugo/" class="color-inherit dim link">Including content from external links with Asciidoc in Hugo</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
I use Hugo for my blog, hosted on GitHub pages. One of the reasons I’m really happy with it is that I can use Asciidoc to author my posts. I was writing a blog recently in which I wanted to include some code that’s hosted on GitHub. I could have copied & pasted it into the blog but that would be lame!
With Asciidoc you can use the include:: directive to include both local files:
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/18/including-content-from-external-links-with-asciidoc-in-hugo/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6647.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/11/what-is-kafka-connect/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 11, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/11/what-is-kafka-connect/" class="color-inherit dim link">What is Kafka Connect?</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<p>Kafka Connect is the integration API for Apache Kafka. Check out this video for an overview of what Kafka Connect enables you to do, and how to do it.</p>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/11/what-is-kafka-connect/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/08/IMG_6248.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/08/counting-the-number-of-messages-in-a-kafka-topic/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 8, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/08/counting-the-number-of-messages-in-a-kafka-topic/" class="color-inherit dim link">Counting the number of messages in a Kafka topic</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>There’s ways, and then there’s ways, to count the number of records/events/messages in a Kafka topic. Most of them are potentially inaccurate, or inefficient, or both. Here’s one that falls into the <em>potentially inefficient</em> category, using <code>kafkacat</code> to read all the messages and pipe to <code>wc</code> which with the <code>-l</code> will tell you how many lines there are, and since each message is a line, how many messages you have in the Kafka topic:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight" style="background-color: #f8f8f8"><code data-lang="bash"><span style="color: #008080">$ </span>kafkacat <span style="color: #000080">-b</span> broker:29092 <span style="color: #000080">-t</span> mytestopic <span style="color: #000080">-C</span> <span style="color: #000080">-e</span> <span style="color: #000080">-q</span>| <span style="color: #0086B3">wc</span> <span style="color: #000080">-l</span>
3</code></pre>
</div>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/08/counting-the-number-of-messages-in-a-kafka-topic/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/09/IMG_6599.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/09/07/poking-around-the-search-engines-in-google-chrome/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Sep 7, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/09/07/poking-around-the-search-engines-in-google-chrome/" class="color-inherit dim link">Poking around the search engines in Google Chrome</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>Google Chrome automagically adds sites that you visit which support searching to a list of custom search engines. For each one you can set a keyword which activates it, so based on the above list if I want to search Amazon I can just type <code>a</code> <code><tab></code> and then my search term</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/images/2020/09/searchengines02.gif" alt="searchengines02"/>
</div>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/09/07/poking-around-the-search-engines-in-google-chrome/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/08/IMG_6174.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/08/20/building-a-telegram-bot-with-apache-kafka-go-and-ksqldb/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Aug 20, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/08/20/building-a-telegram-bot-with-apache-kafka-go-and-ksqldb/" class="color-inherit dim link">🤖Building a Telegram bot with Apache Kafka, Go, and ksqlDB</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>I had the pleasure of presenting at <a href="https://dataengconf.com.au/">DataEngBytes</a> recently, and am delighted to share with you the <strong>🗒️ slides, 👾 code, and 🎥 recording</strong> of my ✨brand new talk✨:</p>
</div>
<div class="paragraph">
<p><a href="https://rmoff.dev/carpark-telegram-bot">🤖Building a Telegram bot with Apache Kafka, Go, and ksqlDB</a></p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/08/20/building-a-telegram-bot-with-apache-kafka-go-and-ksqldb/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/07/IMG_5126.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/07/28/loading-from-rest-api-into-kafka/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Jul 28, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/07/28/loading-from-rest-api-into-kafka/" class="color-inherit dim link">Loading from REST API into Kafka</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
Also: Why Kafka REST Proxy doesn't fit Also: Can you hit the REST API source directly with CDC? Also: Camel? Download & build the plugin
git clone https://github.com/llofberg/kafka-connect-rest.git cd kafka-connect-rest mvn clean package mkdir -p ../data/connectors cp kafka-connect-rest-plugin/target/kafka-connect-rest-plugin-*-shaded.jar ../data/connectors/ && \ cp kafka-connect-transform-from-json/kafka-connect-transform-from-json-plugin/target/kafka-connect-transform-from-json-plugin-*-shaded.jar ../data/connectors/ && \ cp kafka-connect-transform-add-headers/target/kafka-connect-transform-add-headers-*-shaded.jar ../data/connectors/ && \ cp kafka-connect-transform-velocity-eval/target/kafka-connect-transform-velocity-eval-*-shaded.jar ../data/connectors/ Start the stack
docker-compose up -d Check connector has been loaded
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/07/28/loading-from-rest-api-into-kafka/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/img/default-header-img.tn-500x500.jpg'); background-position: center;">
<a href="http://localhost:1313/2020/07/23/telegram-bot-bot_command_invalid/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Jul 23, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/07/23/telegram-bot-bot_command_invalid/" class="color-inherit dim link">Telegram bot - BOT_COMMAND_INVALID</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>A tiny snippet since I wasted 10 minutes going around the houses on this one…</p>
</div>
<div class="paragraph">
<p>tl;dr: If you try to create a command that is <strong>not in lower case</strong> (e.g. <code>Alert</code> not <code>alert</code>) then the <code>setMyCommands</code> API will return <code>BOT_COMMAND_INVALID</code></p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/07/23/telegram-bot-bot_command_invalid/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/07/IMG_5126.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/07/23/learning-golang-some-rough-notes-s02e09-processing-chunked-responses-before-eof-is-reached/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Jul 23, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/07/23/learning-golang-some-rough-notes-s02e09-processing-chunked-responses-before-eof-is-reached/" class="color-inherit dim link">Learning Golang (some rough notes) - S02E09 - Processing chunked responses before EOF is reached</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
<div class="paragraph">
<p>The server sends <code>Transfer-Encoding: chunked</code> data, and you want to work with the data <strong>as you get it</strong>, instead of waiting for the server to finish, the EOF to fire, and <em>then</em> process the data?</p>
</div>
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/07/23/learning-golang-some-rough-notes-s02e09-processing-chunked-responses-before-eof-is-reached/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
<div class="relative w-100">
<article>
<div class="db pv4 ph3 ph0-l no-underline dark-gray">
<div class="flex flex-column flex-row-ns">
<div class="mb4 mb0-ns w-100 h4 h4-m w4-m h5-ns w5-ns br3 cover hide-child" style="background-image: url('http://localhost:1313/images/2020/07/IMG_5126.jpeg'); background-position: center;">
<a href="http://localhost:1313/2020/07/17/learning-golang-some-rough-notes-s02e08-checking-kafka-advertised.listeners-with-go/" class="sans-serif db child w-100 h-100 f7 lh-copy white no-underline br3 ph3 pt4 pt5-l ttu tc bg-black-60">
<i class="mt3 mt5-l child far fa-calendar-alt"></i> Jul 17, 2020
</a>
</div>
<div class="w-100 w6-ns pl3-ns">
<h1 class="f3 fw1 mt0 lh-title"><a href="http://localhost:1313/2020/07/17/learning-golang-some-rough-notes-s02e08-checking-kafka-advertised.listeners-with-go/" class="color-inherit dim link">Learning Golang (some rough notes) - S02E08 - Checking Kafka advertised.listeners with Go</a></h1>
<div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
At the beginning of all this my aim was to learn something new (Go), and use it to write a version of a utility that I’d previously hacked together in Python that checks your Apache Kafka broker configuration for possible problems with the infamous advertised.listeners setting. Check out a blog that I wrote which explains all about Apache Kafka and listener configuration.
You can find the code at https://github.
<p class="pa0 sans-serif f7"><a class="ba br3 pa2 link" href="http://localhost:1313/2020/07/17/learning-golang-some-rough-notes-s02e08-checking-kafka-advertised.listeners-with-go/">Continue Reading <i class="fas fa-chevron-circle-right"></i></a></p>
</div>
</div>
</div>
</div>
</article>
</div>
</section>
</div>
</main>
<div class="hide-print sans-serif f6 f5-l mt5 ph3 pb6 center nested-copy-line-height lh-copy nested-links mw-100 measure-wide">
<div class="about-the-author">
<hr>
<p><img src="/images/2018/05/ksldn18-01.jpg" alt="Robin Moffatt"></p>
<p><!-- raw HTML omitted --><!-- raw HTML omitted --><!-- raw HTML omitted --><!-- raw HTML omitted --> <!-- raw HTML omitted --><!-- raw HTML omitted --><!-- raw HTML omitted --><!-- raw HTML omitted --> <em>Robin Moffatt is a Senior Developer Advocate at Confluent, and an Oracle ACE Director (Alumnus). He likes writing about himself in the third person, eating good breakfasts, and drinking good beer.</em></p>
</div>
</div>
<footer class="w-100 sans-serif" role="contentinfo">
<nav class="w-third-l pb3 f6 center db" role="navigation">
<ul class="pagination">
<li class="page-item">
<a href="/" class="page-link" aria-label="First"><span aria-hidden="true">««</span></a>
</li>
<li class="page-item disabled">
<a class="page-link" aria-label="Previous"><span aria-hidden="true">«</span></a>
</li>
<li class="page-item active">
<a class="page-link" href="/">1</a>
</li>
<li class="page-item">
<a class="page-link" href="/page/2/">2</a>
</li>
<li class="page-item">
<a class="page-link" href="/page/3/">3</a>
</li>
<li class="page-item disabled">
<span aria-hidden="true"> … </span>
</li>
<li class="page-item">
<a class="page-link" href="/page/11/">11</a>
</li>
<li class="page-item">
<a href="/page/2/" class="page-link" aria-label="Next"><span aria-hidden="true">»</span></a>
</li>
<li class="page-item">
<a href="/page/11/" class="page-link" aria-label="Last"><span aria-hidden="true">»»</span></a>
</li>
</ul>
</nav>
</footer>
<footer class="hide-print sans-serif f6 fw1 bg-black near-white bottom-0 w-100 pa3" role="contentinfo">
<p class="w-50 fr tr">
<a class="no-underline near-white" href="https://github.com/xaprb/story"><img class="dib" title="Made with Hugo and Story" alt="Story logo" src="http://localhost:1313/img/story-logo-white.svg" style="width: 1.5rem; height: 1.5rem" /></a>
</p>
<p class="w-50 near-white">
© 2020
</p>
</footer>
<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-75492960-1', 'auto');
ga('send', 'pageview');
}
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
</body>
</html>