Skip to content

vitalibo/distributed-geosearch-system

Repository files navigation

Distributed GeoSearch System

Simple distributed geo search system on top of Apache Kafka

Build Status

Diagram

SVG code
@img.svg
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="826px" height="612px" viewBox="-0.5 -0.5 826 612" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2021-01-15T17:03:11.285Z&quot; agent=&quot;5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.3 Safari/605.1.15&quot; etag=&quot;tTzJXlSEZV6ApKMaS57Z&quot; version=&quot;14.2.3&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;FC1xcK5j96o1Cd-riMZL&quot; name=&quot;Page-1&quot;&gt;7Vzdc6soFP9r8ngZERF9bHvb7uzcznSmD3u7LztEqfHWiKskTfevX4gQNebD2iQ1u7FOGw4Ics7vfAHpCN1MF/c5zSYPPGTJyLbCxQh9H9k2dGxX/lGU95Liu1ZJiPI41I0qwlP8D9NE02wWh6xoNBScJyLOmsSApykLRING85y/NZu98KQ5akYj1iI8BTRpU/+IQzEpqZ5NKvpvLI4mZmTo+mXNlJrGeibFhIb8rUZCtyN0k3Muyk/TxQ1LFPMMX8rn7rbUrl4sZ6no8sDD4300hbfTu8kzffjzdzGeu/Nvupc5TWZ6wvplxbvhQMbjVLD8di7HUcyEI3S9moslCyEtJizUhYmYJqaRyPkru+EJzyUl5ans8DqhY5Y88iIWMU8lOWCqc1kxZ7mIJd9/rDUYcyH4tNbgKokjVSF4JqlUl1b9vMRJYsYc2Qhb6qd85UzNaLqIFFLBtAgoA3Jqs5SBkM3jgP0V5XyWtflqmCRfgC1qJM3ne8anTOTvsokGOXJt4Lu2uVH5/FuFH2j5QNag1eWUTSZ1KJVtWt1QjehoNWwldPlBy/0DGEAbMOAm8i2ux/JDpD4YwguXPKmjw/17xk3Ft2KpvVeyAXSyRVW53ktsCAWjeTCR7XNWzBKJLt1ATiNef0jSytFb5NpbrkFXijMNl9BUeHybxII9ZTRQtW8SBGtwNZhWhSihRaEhXbwyEUxMoQFqCTBrebWBd7e8VFc5DWOJpTVF+AzMdC3yECCW7ZpL2yQNQtslwEKkukkLhjbxAcaO1wYfdoAHneq2j4Q9vBV7RUbTdWEfG49jhZc4jeQTY75gn8fjitaczQWmFUwxVLU1nA4Qpd6XWUg5BdmYlb73Yh0PCDsfA1/+1rc7QNT5LYmxUMamushzMeERT2lyW1Gvg1k+X4m0ErCSQPXAD65Cp2WTX0yIdx1105ngTaGzRSx+qscB1qXnWs33he55WXg3hVTO/We98Fz1oIrVY8uSeW6rxAs+ywO2K4Y1eQHNIyb2OxvFxS5RHETWkSRrkpuNythXVobvEFiYNHnveM4e7i9LjyyP5QRVGK21mebiSiVRKsBWOh8HhnwXJ2bkE0gODkZymxKmPa7A5LTG2MPtdr8MEzp4D3eT96BZvDXk6O8mJFdkss32uwhaZGUG/hIvFJKvmw7m/DyIDX1gY8/d4kI6ZnmeTzC0HUQ8aG/L8tptDo7cdmL/Zd6k5ksqz7LPm1QO5LlhwQ7tTVBXkzQcm4SGI9pGoGB1Ey0cnSpQcDrKFg1GtM4RMo+NviPLecCKQlrQi6vo4Spc3wOeRyxzwTP2FE4Pc3IwC2I+f8Y5rAzKFgvSiGs1BupBrbVuH/ubHNzVmziDMTmbluTW8ZCG7bSgLsyPuZ++cuyDmf6i9I4typo9wFZb//EOievOH9VWTc0ouUjGr8TZHL46xAa4vQRiui/5oXusbyutDUIQBIRgb7PlcywHWMRZ3bA5SMnM1iBL4K449Qksu+cdGX1wCaWLXftE9EQ6KoA3GFNGOpiy/23Isie7JRYGuH4NO2iB3kXVD6fq/tmpun9R9R2qjpb5R3XcwD1nVbfbq+cnTFCGot0HSlDsrkvwg1F1u8cSfL81kWI2/qUMwWVFpI/NcVwgg4qzNjT2xansWPLyMIBe6wjbeYp6OIniIRbA9u2OHDd67LpQYrRpAC5l0xHIi6J3Wts+M0W3d+6o9I0UXunLK131kxuyOZR+iRR24YtAtRBp/TfWIWx8lp5kIB5hMLsgZjX8U7sgPbc1tvJ5P//6nkk4+NYDsiBwvEqnXdxQaulNmj123W3Yfaiz1e2R9xfsLgvMg0OJWSv7epRIgQFCqsjCcg6Dkj3rXR52Qf2LNc5pQbPpNPnwQUMGAxqithS35Z29MeO46kC4s82yeBu/pXAqyHRZ3d4HmR5nuft7/N653cHhQpAPfN9rSBNapBlUkn6Y2dT3qX2QYdwZYaPv8bqDY8NDSufRFp33IQSwfvUECVamAw4kZEEdvvE7MLgM5jyNj9WOeRXTNhXfRx7A0Fvdfc/TuAQ4Fu7q3o4MF9IGxxlks2e+LnqC48eyWP3ngRIs1f9vQLf/Ag==&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g><rect x="0" y="95.96" width="109.63" height="109.63" fill="none" stroke="none" pointer-events="all"/><path d="M 3.3 167.73 C 2.43 167.73 1.59 167.38 0.97 166.76 C 0.35 166.14 0 165.3 0 164.43 L 0 99.27 C 0 98.39 0.35 97.55 0.97 96.93 C 1.59 96.31 2.43 95.96 3.3 95.96 L 99.5 95.96 C 100.38 95.96 101.22 96.31 101.84 96.93 C 102.46 97.55 102.81 98.39 102.81 99.27 L 102.81 119.74 L 95.87 119.74 L 95.87 102.9 L 6.93 102.9 L 6.93 157.71 L 54.7 157.71 L 54.7 167.73 Z M 58.34 126.78 C 58.34 125.91 58.68 125.07 59.3 124.45 C 59.92 123.83 60.76 123.48 61.64 123.48 L 106.33 123.48 C 107.2 123.48 108.04 123.83 108.66 124.45 C 109.28 125.07 109.63 125.91 109.63 126.78 L 109.63 202.29 C 109.63 203.17 109.28 204.01 108.66 204.63 C 108.04 205.24 107.2 205.59 106.33 205.59 L 61.75 205.59 C 60.87 205.59 60.03 205.24 59.41 204.63 C 58.79 204.01 58.45 203.17 58.45 202.29 Z M 65.16 130.3 L 65.16 188.42 L 102.81 188.42 L 102.81 130.3 Z M 78.81 195.36 L 78.81 198.77 L 89.16 198.77 L 89.16 195.36 Z" fill="#505050" stroke="none" pointer-events="all"/><rect x="383.7" y="0.04" width="279.55" height="54.81" rx="8.22" ry="8.22" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><rect x="383.7" y="0.04" width="279.55" height="54.81" rx="8.22" ry="8.22" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 27px; margin-left: 385px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><font style="font-size: 14px"><i>search results</i></font></b></div></div></div></foreignObject><text x="523" y="31" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">search results</text></switch></g><rect x="383.7" y="246.7" width="279.55" height="54.81" rx="8.22" ry="8.22" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><rect x="383.7" y="246.7" width="279.55" height="54.81" rx="8.22" ry="8.22" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 274px; margin-left: 385px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span><b><font style="font-size: 14px"><i>bounding boxes</i></font></b></span></div></div></div></foreignObject><text x="523" y="278" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">bounding boxes</text></switch></g><rect x="383.7" y="328.93" width="279.55" height="54.81" rx="8.22" ry="8.22" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><rect x="383.7" y="328.93" width="279.55" height="54.81" rx="8.22" ry="8.22" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 356px; margin-left: 385px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><font style="font-size: 14px"><i>geo events</i></font></b></div></div></div></foreignObject><text x="523" y="360" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">geo events</text></switch></g><path d="M 274.07 205.59 Q 274.1 274.1 377.33 274.11" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382.58 274.11 L 375.58 277.61 L 377.33 274.11 L 375.59 270.61 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 212.89 150.34 L 122.25 149.11" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 218.14 150.42 L 211.09 153.82 L 212.89 150.34 L 211.19 146.82 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 117 149.04 L 124.04 145.63 L 122.25 149.11 L 123.95 152.63 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="274.07" cy="150.78" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="274.07" cy="150.78" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 151px; margin-left: 220px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><font size="1"><span style="font-size: 16px">api</span></font></b></div></div></div></foreignObject><text x="274" y="154" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">api</text></switch></g><path d="M 383.7 27.44 Q 274.1 27.4 274.08 89.59" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 274.07 94.84 L 270.58 87.84 L 274.08 89.59 L 277.58 87.85 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 753.7 95.96 Q 753.7 27.4 669.63 27.44" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 664.38 27.44 L 671.37 23.94 L 669.63 27.44 L 671.38 30.94 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="753.7" cy="150.78" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="753.7" cy="150.78" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 151px; margin-left: 700px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><font style="font-size: 16px">processor</font></b></div></div></div></foreignObject><text x="754" y="154" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">processor</text></switch></g><path d="M 663.26 274.11 Q 753.7 274.1 753.7 211.96" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 753.7 206.71 L 757.2 213.71 L 753.7 211.96 L 750.2 213.71 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 663.26 356.33 Q 753.7 356.3 753.7 211.96" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 753.7 206.71 L 757.2 213.71 L 753.7 211.96 L 750.2 213.71 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 274.07 438.56 Q 274.1 356.3 377.33 356.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382.58 356.33 L 375.58 359.83 L 377.33 356.33 L 375.59 352.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="274.07" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="274.07" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 287.78 438.56 Q 287.8 356.3 377.33 356.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382.58 356.33 L 375.58 359.83 L 377.33 356.33 L 375.59 352.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="287.78" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="287.78" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 301.48 438.56 Q 301.5 356.3 377.33 356.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382.58 356.33 L 375.58 359.83 L 377.33 356.33 L 375.59 352.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="301.48" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="301.48" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 493px; margin-left: 248px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><font style="font-size: 16px">subject</font></b></div></div></div></foreignObject><text x="301" y="497" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">subject</text></switch></g><ellipse cx="740" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="740" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 663.26 356.33 Q 740 356.3 740 432.19" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 740 437.44 L 736.5 430.44 L 740 432.19 L 743.5 430.44 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="753.7" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="753.7" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><ellipse cx="767.41" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#000000" stroke="#000000" transform="translate(2,3)" opacity="0.25"/><ellipse cx="767.41" cy="493.37" rx="54.81448756218906" ry="54.81448756218906" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 493px; margin-left: 714px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b style="font-size: 16px">kafka<br />connect</b></div></div></div></foreignObject><text x="767" y="497" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">kafka...</text></switch></g><path d="M 663.26 356.33 Q 767.4 356.3 767.4 432.19" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 767.41 437.44 L 763.9 430.44 L 767.4 432.19 L 770.9 430.44 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 301.48 603 L 301.48 554.55" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 301.48 549.3 L 304.98 556.3 L 301.48 554.55 L 297.98 556.3 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 287.78 603 L 287.78 554.55" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 287.78 549.3 L 291.28 556.3 L 287.78 554.55 L 284.28 556.3 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 274.07 603 L 274.07 554.55" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 274.07 549.3 L 277.57 556.3 L 274.07 554.55 L 270.57 556.3 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 740 548.18 L 740 596.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 740 601.88 L 736.5 594.88 L 740 596.63 L 743.5 594.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 753.7 548.18 L 753.7 596.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 753.7 601.88 L 750.2 594.88 L 753.7 596.63 L 757.2 594.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 767.41 548.18 L 767.41 596.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 767.41 601.88 L 763.91 594.88 L 767.41 596.63 L 770.91 594.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 663.26 356.33 Q 753.7 356.3 753.7 432.19" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 753.7 437.44 L 750.2 430.44 L 753.7 432.19 L 757.2 430.44 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
@img.svg

Resources