본관은 강릉(江陵). 자는 원직(元直), 호는 집재(執齋). 충주 출신. 지평 김세행(金世行)의 증손으로, 할아버지는 김시휘(金始徽)이고, 아버지는 진사 김수룡(金壽龍)이며, 어머니는 민취(閔㝡)의 딸이다. 봉사(奉事) 김수구(金壽龜)에게 입양되었다. 윤증(尹拯)의 문인이다.
1753년(영조 29) 알성문과에 병과로 급제하여, 승정원주서와 보안찰방(保安察訪)을 거쳐, 1761년 성균관전적으로 승진하였다. 예조좌랑을 거쳐 1764년 병조정랑이 되었다가 강원도도사로 나갔다. 1770년 개성경력(開城經歷)이 되어, 풍속을 바로잡고 학교를 중수하여 예속과 교육을 진작시켰다.
또한, 자신의 녹봉을 털어 혼사나 장례를 치르지 못하는 가난한 사람들을 도와주기도 하였다. 1771년 당쟁에 연루되어 파면되었다. 그 뒤로 노론이 득세하여 벼슬에 나가지 못했는데, 그 자신이 윤증의 문인이었고 또 양부가 윤증을 위한 변무소(辨誣疏)를 올렸기 때문이다.
1786년(정조 10) 사헌부지평에 임명되었으나 노론의 방해로 취임하지 못하고 그 해에 죽었다. 학문은 주자학적 전통을 중시하여 사서를 기본으로 하였고, 특히 『중용(中庸)』에 조예가 깊었다. 일찍이 「성선이기설(性善理氣說)」을 지어 경서의 뜻을 밝힌 것이 많았다. 시문집 6권을 남겼다.